【BATCH】バッチファイル作成時によく使うコード

テキストファイルに入力する

いずれも指定のファイルが見つからなければ新規作成。

上書きする

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で出力する場合は%ではなく!で囲みます。

スポンサーリンク