バッチファイル/cmd.exe/コマンドプロンプト †
遅延環境変数 †
forの中で文字列/数値を足そうと思っても、変数が展開されない。
- ポイント
- 行頭に「@setlocal enabledelayedexpansion」を追加
- forの中で参照したい変数(var)を、「!var!」と書く
コマンドを実行して結果を環境変数へ代入 †
- バッチファイル内だと「%%A」
- コマンド結果にスペースが入っていると、そこで途切れる
ダブルクオートの除去 †
test.bat "aaa bbb"
"aaa bbb"
aaa bbb
7zを使ったzipの作成 †
- 7zdir.bat
- 実行
7zdir .
日付と時刻の抽出 †
- Windows7で確認
echo %date%
2014/12/01
echo %time%
01:02:03.45
echo %date:~-10,4%%date:~-5,2%%date:~-2,2%
20141201
echo %TIME:~0,2%%TIME:~3,2%%TIME:~6,2%
010203
UAC対応 †
- UAC有効時に「管理者として実行」から実行すると、「%windir%\system32」へと強制移動してしまい、動作しない場合がある対策。以下を先頭に追記
CD /D "%~dp0"
バッチファイルで文字列の抽出 †
- CSVやTSVといったファイルから、特定の値を抽出したい場合
- windows7で確認
- a.csv
a,100
b,200
- a.bat
@echo off
for /f "tokens=1,2 delims=," %%a in (a.csv) do echo %%a ---- %%b
rem 結果:a ---- 100
rem b ---- 100
for /f "tokens=1,2 delims=," %%a in (a.csv) do if "%%a" == "a" echo %%b
rem 結果:100
バッチファイルの実行パス取得 †
- 例: d:\tmp\sample.bat, windows7で確認
echo %0
sample.bat