バッチファイルのメモ

学んだことを忘れないようにメモを残しておく。これからいろいろ追記予定。

  • 本文部分_2336_ナントカカントカ.txt
  • 本文部分_2337_ホニャララ.txt
  • 本文部分_2338_モニョモニョ.txt

というテキストファイルと、

  • PP枠_2336_ナントカカントカ.txt
  • PP枠_2337_ホニャララ.txt
  • PP枠_2338_モニョモニョ.txt

というテキストファイルが数字部分の数だけ(つまり 2,000 個以上)あって、それぞれ同じ数字のもの同士を結合したファイルを作りたいという状況。

copy ファイル1+ファイル2 新しいファイル名


コマンドプロンプトで copy コマンドを使ってファイルの結合ができる。結合するファイルを + でつないで、スペースあけて結合後のファイル名を指定する。

copy 本文部分_2336_*.txt+PP枠_2336_*.txt 結合_2336.txt


「ナントカカントカ」の部分(ほんとはもっと長い)は手動で指定していたら日が暮れるどころの話ではないくらい時間がかかって現実的ではないので、ワイルドカード * で置き換える。

for %%V in ( 2336 2337 2338 ) do copy 本文部分_%%V_*.txt+PP枠_%%V_*.txt 結合_%%V.txt


for 文で 変数 %%V が取る値を in ( ) の部分に書いて指定できる。

copy 本文部分_2336_*.txt+PP枠_2336_*.txt 結合_2336.txt
copy 本文部分_2337_*.txt+PP枠_2337_*.txt 結合_2337.txt
copy 本文部分_2338_*.txt+PP枠_2338_*.txt 結合_2338.txt


上記の例だとこのようになる。

for /l %%V in ( 2331,1,2340 ) do copy 本文部分_%%V_*.txt+PP枠_%%V_*.txt 結合_%%V.txt


for 文に /l オプションをつけると、in ( 初期値 , 増分 , 終了値 ) のかたちで変数の範囲を指定して do 以下のコマンドを繰り返し処理させることができる。

copy 本文部分_2331_*.txt+PP枠_2331_*.txt 結合_2331.txt
copy 本文部分_2332_*.txt+PP枠_2332_*.txt 結合_2332.txt
copy 本文部分_2333_*.txt+PP枠_2333_*.txt 結合_2333.txt
copy 本文部分_2334_*.txt+PP枠_2334_*.txt 結合_2334.txt
copy 本文部分_2335_*.txt+PP枠_2335_*.txt 結合_2335.txt
copy 本文部分_2336_*.txt+PP枠_2336_*.txt 結合_2336.txt
copy 本文部分_2337_*.txt+PP枠_2337_*.txt 結合_2337.txt
copy 本文部分_2338_*.txt+PP枠_2338_*.txt 結合_2338.txt
copy 本文部分_2339_*.txt+PP枠_2339_*.txt 結合_2339.txt
copy 本文部分_2340_*.txt+PP枠_2340_*.txt 結合_2340.txt


上記の例だと、変数 %%V は 2331 から 2340 まで 1 ずつ増えながら do 以下の処理が繰り返される。

出来上がったファイル名は 結合_2331.txt となるのだが、「ナントカカントカ」の部分も付加したいので改良する。

for /l %%V in ( 2331,1,2340 ) do (
 for %%i in (PP枠_%%V_*.txt) do copy 本文部分_%%V_*.txt+PP枠_%%V_*.txt 結合_%%V_%%i.txt
 )
call :main >"%~dp0LOG.TXT" 2>&1 <nul %*
goto :eof
:main
%i:~6%