目次
バッチファイル作成時によく使うコード
テキストファイルに入力する
いずれも指定のファイルが見つからなければ新規作成。
上書きする
echo ほげ > hoge.txt 追加する echo ほげ >> hoge.txt テキストファイルを読み込みループ処理をする for /f %%r in (hoge.txt) do ( echo %%r )
処理をする列番号を指定
for /f "tokens=3" %%a in (hoge.txt) do ( echo %%r ) ドラッグ&ドロップで処理するディレクトリを選択する for %%f in (%*) do ( set myDir=%%f ) if %myDir%.==. ( exit ) else ( pushd %myDir% )
ドラッグ&ドロップで選んだディレクトリをmyDirに格納。
その後nullの場合は中止する分岐を行います。nullままだとif分が使えないため、任意の文字列を付けて条件式を記述します。
ファイルをコピーする
copy hoge fuga
hogeがコピー元のファイル、fugaがコピー先のファイル名です。いずれもフルパスで指定する必要があります。
ファイル名を取得する
echo %%~nA
ファイルが格納されている変数Aに対して記述する場合、~nを付けるとファイル名のみを取得します。
拡張子も合わせて取得する
echo %%~nxA
同様のケースで、拡張子まで取得したい場合は~nxを付けます。
フォルダを移動する
pushd A
フォルダを移動します。それ以降は移動先フォルダを基準に動作します。
フォルダを作成する
md hoge
現在の日付時刻を元にした文字列を作成する
日付
set str=%date:~0,4%%date:~5,2%%date:~8,2%
2023年6月24日であれば「20230624」を出力。
%dateではyyyy/mm/ddとなるため、/を除いた文字列を取ります。
「%hoge:~x,y」で、hogeのx番目の文字列からy文字取得します。
時刻
set time2=%time: =0% set str:%time2:~0,2%%time2:~3,2%%time2:~6,2% 0時15分05秒であれば「001505」を出力
日付と同じ要領だが、%timeは上記の時刻であれば「 0:15: 5」と10秒未満は十の位を空白で返してしまい、そのままだと「 015 5」を出力してしまう。
別の変数を使って空白を0に置換した上で取り出す処理を行う。
処理を中断する
pause
実行結果を非表示にする
@echo off
指定のフォルダ名の中のファイルを処理する
for /d /r %%a in (*hoge) do ( pushd %%a for /r %%b in (*.csv) do ( echo %%b ) )
現在開いているフォルダ内にある「hoge」というフォルダに限定して、CSVファイルを処理していきます。
forの後ろのパラメータは/dはディレクトリを対象に、/rですべての階層の子フォルダを対象にします。
()内に指定するフォルダ名を入力。変数にはフルパスでフォルダ名が入るため、ワイルドカードなどを使って指定します。
pushdで対象のフォルダに移動。同じ要領でCSVファイルを処理していきます。こちらはファイルが対象なので/dは不要。子フォルダがなければ/rも不要です。
変数の計算
set var=1 set /a var=var+1 echo %var%
変数に値を入れる時はset、計算して変数に入れる場合はset /aを使います。
また、echoなどで変数を出力する場合は%で囲みます。囲まないと「var」という文字列が表示されます。
遅延環境変数
setlocal enabledelayedexpansion set var=1 for /l %%a in (1,1,10) do ( set /a var=var+%%a echo !var! ) endlocal
for文やif文の中で変数を使った計算がうまくいかない場合はこれが必須。これをしないと値が変わりません。
遅延環境変数をechoで出力する場合は%ではなく!で囲みます。