SYNTAX





ExitCode(終了コード)


バッチの各コマンドラインで呼び出すプロセスの終了コードは %ERRORLEVEL% で取得できる。
// test.js WScript.Quit( 0 );
// main.exe int main (){ return 1; }
cscript test.js echo ExitCode = %ERRORLEVEL% ./main.exe echo ExitCode = %ERRORLEVEL%



バックグラウンド実行(Background)


非同期でプロセスを実行するには start コマンドを使う。 __LINK__(start)
echo start :: メモ帳は起動するがブロックされない start notepad.exe echo finish
start を利用しないとブロックされる
echo start notepad.exe echo finish



組込み変数(EmbededVariable)


:: WORKING PATH :: CurrentDirectory のチェックに便利 echo %CD% :: C:\WINDOWS echo %SystemRoot% :: C: echo %SystemDrive% :: \Documents and Settings\usrname echo %HomePath% :: \Documents and Settings\usr echo %HOMEPATH% :: あなたがつけたコンピュータ名 echo %HOSTNAME%



コマンドのエコー


通常のバッチの実行では各行のコマンドがエコーされる。 各コマンドの最初に @ をつける
@mkdir tmp
エコーをオフにする。
echo off mkdir tmp



Command.の結合


SYNTAX cmdA && cmdB cmdA || cmdB
:: コマンドの実行結果が真であれば, echo bbb を実行 echo aaa && echo bbb cmd /c copy aa.txt bb.txt >nul && echo succeeded. cmd /c copy aa.txt bb.txt >nul || echo fail cmd /c echo aaa && echo succeeded.



Redirect


date /t > "d/test.txt"



コマンド置換


set a=%date% set a=%time% set a=%hostname%
POINT ファイル名にタイムスタンプをつける
set t=%time% set f=log%t%.txt



STDOUT


DESC cmd にも pipe という概念がある
:: :: Redirect :: echo aaa > d:/ret.txt :: stderr のみ echo aaa 2> d:/ret.txt :: stdout のみ echo aaa 2> d:/ret.txt :: stdout stdin を同じにする echo aaa > d:/ret.txt 2>&1



quot


// VS でもできる "copy $(TARGET)" // < をはく echo ^< :: SAPCE があるときは ["] で quot する ( ややこしい ! ) :: BAD c:/Program Files/foo/test.exe :: OK "c:/Program Files/foo/test.exe" :: ["] は 引数には含まれない -> やっぱり含まれる ? test.bat "argument" /pro/bat/arg.bat "argument" :: BAD C:\Program" "Files\Windows" "Media" "Player\wmplayer.exe /play C:\mymus\test.wpl :: OK "C:\Program Files\Windows Media Player\wmplayer.exe" /play C:\mymus\test.wpl



Drive.のきりかえ


:: [:] を忘れずに, 大文字 小文字はどちらでも OK :: BAD d :: OK d: :: OK D:



Comment


REM comment rem comment :: comment


文字.Code


WARNING sjis-unix では 日本語はダメ