Windows バッチファイル
文字列操作
文字列の部分を取り出す
C:\Windows\System32>set stringop=abcdefg C:\Windows\System32>echo %stringop% abcdefg C:\Windows\System32>echo %stringop:~3,2% de
日時
Windowsのバッチスクリプトの場合、bashみたいに、date関数があるわけでなくて、環境変数dateとtimeで取得する。
C:\>echo %date% %time% 2011/03/19 0:17:53.29 C:\Windows\System32>echo %date% %time% 2011/03/19 0:20:41.59
for
便利な機能もあるのだけど、どうもシンプルでないな。
helpを何度も見ないと、とてもあつかえる気がしない。
for-L-examples.cmd
@echo off for /L %%i in (0, 1, 3) do echo %%i for /L %%i in (10, 5, 30) do ( echo %%i ) rem 変数名がabのように2文字以上になるとエラー for /L %%ab in (0, 1, 3) do echo %%i
実行すると
0 1 2 3 10 15 20 25 30 %ab の使い方が誤っています。
for-F-examples.cmd
@echo off rem for /FをつかうとCSVのような書式のテキストを処理できる call :cat a.txt call :cat b.txt call :cat c.txt call :countline a.txt call :countline b.txt call :countline c.txt rem ここでexitしないとこれ以降の行も実行されてしまう exit /b :cat rem :区切りのCSVを処理する rem 1番目のフィールドを%%aで取得できる rem 2番目以降のフィールドを%%bで取得できる for /F "delims=: tokens=1,2*" %%a in ('findstr /n "^" %1') do ( @echo %%a %%b ) @rem ここでexitしないとこれ以降の行も実行されてしまう exit /b :countline setlocal enabledelayedexpansion set COUNT=0 rem findstr /n "^"これは、cat -n for /F "delims=:" %%a in ('findstr /n "^" %1') do ( set /a COUNT=!COUNT!+1 ) echo !COUNT! endlocal exit /b