BATファイルにJScriptを埋め込む
これは、コマンドプロンプト(cmd.exe) Advent Calendar 2015 - Qiitaの15日目の記事です。
※Windows 10 Home 64bit 搭載のcmd.exeにて検証を行っています。
さて、BATファイルにJScriptを埋め込む方法です。割りとポピュラーなので、ご存じの方はご存知かと思いますが……
なので、解説をするのではなく、自分がいつも使っているテンプレートを晒すことにしようと思います。
@if (1==1) /* @echo off setlocal if "%~1"=="" goto :USAGE if "%~1"=="/?" goto :USAGE rem ******************************************************************************** :MAIN CScript //nologo //E:JScript "%~f0" %* If ERRORLEVEL 1 goto :USAGE goto :eof rem ******************************************************************************** :USAGE echo USAGE: echo %~n0 コマンドパラメータ echo コマンドの説明 echo. echo 【オプション】 echo -? hogehoge echo オプションの説明 goto :eof rem ******************************************************************************** rem */ @end //---------------------------------------------------------- セットアップ var Args = WScript.Arguments; var FSO = WScript.CreateObject("Scripting.FileSystemObject"); var DEBUG = false; function echo(o){ WScript.Echo(o); } function NewReader(fileName){ var ForReading = 1 //readonly if (!fileName){ return WScript.StdIn; } else { return FSO.OpenTextFile(fileName, ForReading, false); } } //---------------------------------------------------------- 引数処理 var infile = null; for (var i=0; i<Args.Length; i++){ var p = Args(i); switch (p) { case "-h": WScript.Quit(2); break; default: if (!infile) { infile = p; } break; } } if (DEBUG){ echo("[PARAMS]"); echo(" infile\t\t:" + infile); } if (!infile){ echo("入力ファイルが指定されていません"); WScript.Quit(9); } //---------------------------------------------------------- 主処理 var FS = ","; var str, arr, i, j; // read arr = []; var rs = NewReader(infile); while(!rs.AtEndOfStream){ str = rs.ReadLine(); i = rs.Line - 2; arr[i] = str.split(FS); } // out for(var i=0; i<arr.length; i++){ var out = ""; var line = arr[i]; for (var j=0; j<line.length; j++){ out += line[j]; if (j < line.length - 1){ out += FS; } } echo(out); } delete reader; delete FSO;
だいぶ大仰な作りをしていますが、CSVファイルを開いてカンマ区切りで読み込み、カンマ編集して出力する、という内容になっています。
※JScriptを埋め込みたいときはたいていテキストの入出力をしたいときが多いので……
適宜書き換えて使います。簡単なことをしたいだけの時は、ばっさりカットして使います。