DOSバッチファイル メモ
windows バッチファイルを使うことが何回かあるのでそのメモ
DOSコマンドメモ
参考サイト
- 名前変更
rename 対象のファイル名 新しいファイル名
rename = renなのでrenでのOK
ディレクトリ配下の特定のファイル名のみ名前変更したい場合は、ワイルドカードが使用可能。例えば拡張子txtをbinに変えたい場合
rename *.txt *.bin
ren text.txt "テキスト ファイル".txt
スペースが入る場合は""で括らないと上手く動作しない
- 日付取得
C:\>echo %date%
2014/12/30
C:\>echo %time%
22:53:04.95
日時を加工して、一部の文字列だけ抽出してファイル名にする場合には、
例えば、生年月日_時間_分.txtというファイルを作りたいとき
echo %date% > %date:~5,2%%date:~8,2%_%time:~0,2%_%time:~3,2%.txt
とすればよい。%date:~5,2%は%date%の6文字目(0番目,1番目と数える)から2文字表示すると言う意味。
- ディレクトリ移動
cd /d 移動したいディレクトリ名
/dはドライブを移動する場合に必要なオプション
- 引数
バッチファイルを作る時に使うことが多い。これを使える様になると色々とバッチファイルで出来ることが広がる。
マイクロソフトのマニュアルページでは
Cmd.exe には、バッチ パラメータ展開変数 %0 ~ %9 があります。バッチ ファイルでバッチ パラメータを使用する場合、%0 はバッチ ファイル名で置き換えられ、%1 ~ %9 はコマンド ラインで入力するそれぞれの引数で置き換えられます。%9 を超えて引数にアクセスする場合は、shift コマンドを使用する必要があります。shift コマンドの詳細については、「Shift」を参照してください。バッチ パラメータ %* は、バッチ ファイルに渡される %0 を除くすべての引数を参照するワイルドカードです。コマンドプロンプト上にメッセージ表示
と書かれている。
バッチファイル名 引数1 引数2 ... 引数9
と入力すると、%1から%9にそれぞれ引数1から引数9が渡される。
cmd.bat内で
xcopy %1\*.* %2
とバッチファイルを作り、コマンドラインで
cmd.bat D:¥CopyTarget D:¥CopyDest
とすれば、CopyTarget -> CopyDestへのファイルコピーが出来る。
10以上の引数を渡す場合はshiftコマンドを使用して、
cmd.bat内で
echo %0 %1 %2 %3 %4 %9
shift /2
echo %0 %1 %2 %3 %4 %9
として
cmd.bat a b c d e f g h i j k l m n
> %PATH%¥cmd.bat a b c d i
> %PATH%¥cmd.bat a c d e j
となる。 /n でn番目の文字列から1文字左へシフトする。20個の引数がある場合は10回shiftコマンドを発行することになる。shiftで消えた引数は復旧出来ないので必要ならば
setコマンドで別の変数に退避しておく。
- ファイル出力
コマンド名 > 出力ファイル名
- ファイル読み込み
あるtext.txtの文字列を読み込んで表示する方法。FORを使う
for {%Variable | %%Variable} in (Set) do Command [CommandLineOptions]
Setの内容を%%Variableに入力する。
Set = PATH¥text.txt
とすればテキストファイル内を1ラインずつ読み込んでくれる。
Set = Dir /a-s /on /b
とすればディレクトリ下にあるファイルを一つずつ処理する時に使える。
for /F "tokens=2,3*" %%a in (C:¥text.txt) do (
echo %%a %%b
)
text.txt内のスペース、タブで区切られた文字列をトークンとして、2番目と3番目以降のトークンをまとめたものをそれぞれ%%aと%%bに入れる。
コマンド上からforを使う時は%a、バッチファイルで使う時は%%b
ループ内でカウンタを使用したい場合
SET X=0
SET Y=10000
setlocal enabledelayedexpansion
for /F "tokens=1,2*" %%a in (C:¥text.txt) do (
:: echo %%b
SET /a X=!X!+1
echo %Y:~1%!X!
)
endlocal
とする必要がある。通常の四則演算では思った通りにカウントアップされない。
この結果は
0001
0002
0003
....
という形になる。
20150104追記
- 実行コマンドを表示しない
echo off
をバッチファイルの先頭に記述するとバッチファイル実行時に実行したコマンドがコマンドプロンプト上に表示されない。
- 変数に値を代入する
SET dainyuData = 代入したい値
dainyuDataの頭に%を付けると環境変数の変更になる。
- ファイル名変更
ren text ^"%%b^".txt
変数b内にスペースが入っている場合のファイル名変換方法。コマンド構文が間違っていますと出る場合には試すとよい