Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

Bat jscrpt powershell

509 visualizaciones

Publicado el

  • Sé el primero en comentar

  • Sé el primero en recomendar esto

Bat jscrpt powershell

  1. 1. 明日から仕事で使える(物もあるかも) バッチファイル、JScript、PowerShell のサンプルプログラムの紹介 2015/7/2 佐野 尚之
  2. 2. アジェンダ  バッチファイル、VBScript、Jscript、PowerShellについて  ファイルをコピー  ファイルを移動  ファイルが存在したら削除  古いログファイルを削除  Oracleに接続してSQLを実行して結果をファイルに出力  文字コードがShift-JISのファイルをUTF-8に変換  縦のデータを横に並べる  CSVファイルのデータをSQL文で操作  参考URL 2
  3. 3. バッチファイル、VBScript、Jscript、 PowerShellについて  バッチファイル(拡張子「.bat」)  Windowsのコマンド プロンプトで使用できるコマンド実行をテキストファイルに記載した ものがバッチファイル。  VBScript(ブイビースクリプト。拡張子「.vbs」)・・・今回は対象外です(^_^;)  Visual Basic のサブセットの為、すべてのステートメント、組み込み関数をサポートして いない。型がなかったり(すべて Variant 型)、Format 関数がない。On Error Gotoが 無くてOn Error Resume Nextのみ。  JScript(ジェイスクリプト。拡張子「.js」)  ECMAScript(※)やJavaScript と互換性があるマイクロソフトが作ったスクリプト言語。  PowerShell(パワーシェル。拡張子「.ps1」)  NET Framework を利用するWindowsのシステム管理用シェル。Active Directoryや Office365のユーザー追加/更新/削除を行うこともできる。 ※ECMAScript(エクマスクリプト)は、Ecma Internationalによって標準化されたスクリプト 言語。 実装ごとの互換性が低い JavaScript 類(特に JScript)の標準を定めたもの。 3
  4. 4. ファイルをコピー バッチファイル 4 REM test.txtファイルをd:backupフォルダにコピー REM d:backupフォルダに同じ名前のファイルがあっても REM 上書き確認をしない(オプション「/Y」) COPY /Y test.txt d:backup REM test.txtファイルをd:backupフォルダに REM test2.txtというファイル名でコピー REM d:backupフォルダに同じ名前のファイルがあっても REM 上書き確認をしない(オプション「/Y」) COPY /Y test.txt d:backuptest2.txt
  5. 5. ファイルをコピー JScript PowerShell 5 // ファイル関連の操作を提供するオブジェクトを取得 var fs = new ActiveXObject( "Scripting.FileSystemObject" ); // C:/TEST/1/Info.txtをC:/TEST/2にコピー // コピー先の同名のファイルが読取専用ファイルだった場合は // 例外が発生します。 // 引数の3番目の設定値がtrueなら上書きされ、falseは上書き // されません。(省略可) // 省略した場合は、trueと同じ動作です fs.CopyFile( "C:/TEST/1/Info.txt", "C:/TEST/2/" ); // オブジェクトを解放 fs = null; Copy-Item test.txt d:backuptest2.txt
  6. 6. ファイルを移動 バッチファイル 6 REM test.txtファイルをd:backupフォルダに移動 REM d:backupフォルダに同じ名前のファイルがあっても REM 上書き確認をしない(オプション「/Y」) MOVE /Y test.txt d:backup REM test.txtファイルをd:backupフォルダに REM test2.txtというファイル名で移動 REM d:backupフォルダに同じ名前のファイルがあっても REM 上書き確認をしない(オプション「/Y」) MOVE /Y test.txt d:backuptest2.txt
  7. 7. ファイルを移動 JScript PowerShell 7 // ファイル関連の操作を提供するオブジェクトを取得 var fs = new ActiveXObject( "Scripting.FileSystemObject" ); // C:/TEST/1の拡張子が「.txt」のファイル全てをC:/TEST/2に移動 // 同じ名前のファイルがあった場合は例外が発生 fs.MoveFile( "C:/TEST/1/*.txt", "C:/TEST/2/" ); // オブジェクトを解放 fs = null Move-Item test.txt d:backuptest2.txt
  8. 8. ファイルが存在したら削除 バッチファイル JScript 8 IF EXIST “d:workuser.csv" ( DEL /F /Q “d:workuser.csv" ) // ファイル関連の操作を提供するオブジェクトを取得 var fs = new ActiveXObject("Scripting.FileSystemObject"); // 「C:/TEST」の階層に「Info.txt」ファイルが存在しているかを確認 If (fs.FileExists("C:/TEST/Info.txt")) { // 2つ目の引数がtrueの場合、読み取り専用のファイルも削除しますが、 // falseの場合、は読み取り専用ファイルは削除できません fs.DeleteFile("C:/TEST/Info.txt", true); } // オブジェクトを解放 fs = null;
  9. 9. ファイルが存在したら削除 PowerShell 9 if (Test-Path "c:testinfo.txt") { # 読み取り専用ファイルを削除するには、-forceパラメータを使用する Remove-Item "c:testinfo.txt" -force }
  10. 10. 古いログファイルを削除 バッチファイル <参考URL> Windowsのforfilesコマンドで条件に合うファイルを取り出して処理する http://www.atmarkit.co.jp/ait/articles/0902/27/news132.html WindowsServer、Forfilesコマンドで古いログを自動で削除 http://www2.sawanoboly.net/wp_old/2008/07/25/386.html 10 REM "C:worklogフォルダ内の拡張子が「.log」のファイルで REM 更新日が5日以上前のものを削除 forfiles /P "C:worklog" /M *.log /D -5 /C "cmd /c DEL /F /Q @file"
  11. 11. Oracleに接続してSQLを実行して結果を ファイルに出力 バッチファイル 11 <実行するSQLファイル> set feedback off set heading off set pagesize 0 set verify off spool &1 select TO_CHAR(YMD,'YYYY/MM/DD HH24:MI:SS') || ',' || TITLE from TITLES where YMD BETWEEN TO_DATE('&2', 'YYYY/MM/DD HH24:MI:SS') AND TO_DATE('&3', 'YYYY/MM/DD HH24:MI:SS') order by YMD; spool off; exit; REM sqlplus ユーザ名/パスワード@ネットサービス名 @実行するSQLファイル SQLファイルの引数① SQLファイルの引数② sqlplus -s test/password@XE @"d:worksqluser.sql" "d:workoutuser.csv" "2015/07/01 2:00" "2015/07/02 2:00"
  12. 12. 文字コードがShift-JISのファイルをUTF-8に変換 JScript 12 var strFullPath = "C:/Users/sano/Desktop/test.txt"; // ファイル関連の操作を提供するオブジェクトを取得 var fs = new ActiveXObject("Scripting.FileSystemObject"); var Stream = new ActiveXObject("ADODB.Stream"); var Stream2 = new ActiveXObject("ADODB.Stream"); Stream.Open(); Stream.Type = 2; // StreamTypeEnum の adTypeText Stream.Charset = "shift_jis"; Stream.LoadFromFile(strFullPath); Stream2.Open(); Stream2.Charset = "utf-8"; Stream.CopyTo(Stream2); Stream2.SaveToFile(strFullPath, 2); Stream2.Close(); Stream.Close(); // オブジェクトを解放 fs = null;
  13. 13. 縦のデータを横に並べる JScript Inputファイル FROM : a1 TO : test1@hogehoge.com TEST : b FROM : b1 TO : test2@hogehoge.com TEST : c ↓ Outputイメージ FROM,TO,TEST a1,test1@hogehoge.com,b b1,test2@hogehoge.com,c 13
  14. 14. 縦のデータを横に並べる x 14 String.prototype.trim = function() { return this.replace(/^[s ]+|[s ]+$/g, ''); } // オープンモード var FORREADING = 1; // 読み取り専用 var FORWRITING = 2; // 書き込み専用 var FORAPPENDING = 8; // 追加書き込み // 開くファイルの形式 var TRISTATE_TRUE = -1; // Unicode var TRISTATE_FALSE = 0; // ASCII var TRISTATE_USEDEFAULT = -2; // システムデフォルト // ファイル関連の操作を提供するオブジェクトを取得 var fs = new ActiveXObject( "Scripting.FileSystemObject" ); // ファイルを読み取り専用で開く var file = fs.OpenTextFile( "C:/TEST/test2.txt", FORREADING, true, TRISTATE_FALSE ); var wkData = ""; var outData = ""; JavaScript :: trimメソッドを実装する http://tm.root- n.com/programming:javascript:et c:trim
  15. 15. 縦のデータを横に並べる x 15 while( !file.AtEndOfStream ) { var data = file.ReadLine(); if (data.length == 0) { // 何もしない } else { if (wkData.length == 0) { if (!(data.indexOf(":") == -1)) { wkData = data.substring(data.indexOf(":")+1, data.length).trim(); } } else { if (!(data.indexOf(“:”) == -1)) { wkData += “,” + data.substring(data.indexOf(“:”)+1, data.length).trim(); } } if (!(data.indexOf("TEST")== -1)) { if (outData.length == 0) { outData = wkData; } else { outData += "n" + wkData; } wkData = ""; } } }
  16. 16. 縦のデータを横に並べる x 16 file.Close(); fs = null; var header = "FROM,TO,TEST"; WScript.Echo(header + "n" + outData);
  17. 17. CSVファイルのデータをSQL文で操作 JScript 17 var csv_dir = "C:/TEST"; var con = new ActiveXObject("ADODB.Connection"); con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + csv_dir + ";" + "Extended Properties="text;HDR=YES;FMT=Delimited;";"; con.Open(); // CSVファイルから、SQLでクエリ var rs = con.Execute("select * from test#csv"); var strOut = ""; while (!rs.EOF) { strOut += rs.Fields("社員番号") + "(" + rs.Fields("グループ") + ")" + "n"; rs.MoveNext(); } WScript.Echo(strOut); rs.Close(); con.Close(); 64bit版のWindowsの場合、以下の サイトを参照して32bit版のcscriptを 呼び出す必要があります。 http://nestblog.blog.fc2.com/blo g-entry-69.html
  18. 18. 参考URL Windowsコマンドプロンプト基礎文法最速マスター http://windows.g.hatena.ne.jp/cx20/20100203/p1 VBScript 基礎文法最速マスター http://vbscript.g.hatena.ne.jp/cx20/20100131/1264906231 JavaScript基礎文法最速マスター http://gifnksm.hatenablog.jp/entry/20100131/1264934942 PowerShell基礎文法最速マスター http://winscript.jp/powershell/202 DOS_VBScript(PowerShellも) http://rururu.sakura.ne.jp/doc/DOS_VBScript.pdf SQL*Plus の使い方 http://www.shift-the-oracle.com/sqlplus/ リレーショナル・データベースの世界 http://www.geocities.jp/mickindex/database/idx_database.html 18
  19. 19. 参考URL JScriptでOfficeドキュメントをPDFに http://qiita.com/tnakagawa/items/5e566974b5c0caee608e VBScript : 既存の Excel を PDF に変換する ( Excel 2007以降 ) http://logicalerror.seesaa.net/article/144750949.html VBScript : 複数テキストファイルの charset(キャラクタセット) 一括変換 / ADODB.Stream http://logicalerror.seesaa.net/article/120426106.html CSVやテキストファイルのレイアウトを定義する http://www.happy2-island.com/access/gogo03/capter00507.shtml ADODBでUTF-8のCSVを取り込む http://my-business-adversaria.blogspot.jp/2012/08/adodbutf-8csv.html 64bit OSでADODBテキストドライバを使う http://my-business-adversaria.blogspot.jp/2012/08/64bit-osadodb.html UWSCでODBC(Microsoft Text Driver)を使ったCSVファイル検索 http://d.hatena.ne.jp/junjun777/20110628/uwsc_odbc_text_dirver 19

×