batファイルで連番ファイル生成(親ファイルからコピー)
※23/6/10に自サイトから転載(元サイト投稿日時23/5/30)
batファイルを使う機会があったのですが、batファイルが何か全く知りませんでした。興味があったので少し勉強した内容を備忘録として残しておきます。
今回のbatファイル(createFolder.bat)
今回はcreateFolder.batはカレントディレクトリ(createFolder.batがあるフォルダ)にaiueoXX.txtが存在するとき、以下のことが実行されます。
フォルダ名、連番開始番号、コピーファイル数指定
カレントディレクトリに新規フォルダ生成
batファイル構文
@echo off
処理内容を非表示
rem コメント内容
コメント
chcp 文字コードを表すコードページ番号
文字コード変更
set 変数名=値
変数に値を代入
set /p 変数名=文字列
文字列をコマンドラインに表示し入力を受け付ける、入力された文字列が変数に代入される
set /a 変数名=値
値を数値として扱う、演算子を使える
%変数名%
変数参照
md フォルダ名
フォルダを生成
パスの指定可能、カレントディレクトリは省略可能
:ラベル名
ラベルを設定
goto ラベル名
ラベルに飛ぶ
if 条件式 (処理)
条件式には変数や比較演算子が使える
gotoと同時に用いて繰り返しを実装可能
copy コピー元ファイル コピー後ファイル名
コピー元ファイルをコピー後ファイル名の名前でコピー
パスの指定可能、カレントディレクトリは省略可能
createFolder.bat
createFolder.batの中身はこうなっています。batファイルはtxtファイルなどの拡張子を変更すれば作成可能です。
@echo off
rem 処理の出力をオフにしcmdの文字コードをutf-8に
chcp 65001
rem folderNameはフォルダの名前、フォルダ生成
set /p folderName=folderName:
md .\%folderName%
rem numはファイルの始まり、roopTimesはファイル個数、endNumは繰り返し条件用
set /p num=startNum:
set /p roopTimes=roopTimes:
set /a endNum=%num%+%roopTimes%
rem numをループカウンタに1ずつ足しendNumに達したらendに飛ぶ
:roop
set fileName=aiueo%num%.txt
copy aiueoXX.txt .\%folderName%\%fileName%
set /a num=%num%+1
if %num%==%endNum% (
goto end
)
goto roop
:end
部分ごとに解説していきます。
@echo off
chcp 65001
1行目で処理内容を表示しないようにしています。
2行目でcmdの文字コードをutf-8に変更しています。batファイルの文字コードはutf-8で保存しています。
set /p folderName=folderName:
md .\%folderName%
1行目でコマンドラインからの入力をfolderNameに代入しています。実際は以下のように出力されてから入力を受け付けます。
folderName:2行目でカレントディレクトリにfolderNameに代入された文字列名のフォルダを新規生成します。
set /p num=startNum:
set /p roopTimes=roopTimes:
set /a endNum=%num%+%roopTimes%
1行目でnumに開始連番をコマンドラインからの入力で代入します、ループカウンタとしても用います。
2行目でroopTimesにいくつコピーしたいかコマンドラインからの入力で代入します。
3行目でendNumにnumとroopTimesの値の和を代入します。繰り返しの条件式用です。
:roop
set /a num=%num%+1
if %num%==%endNum% (
goto end
)
goto roop
:end
ここの処理は繰り返しです。
2行目でnumの値に1追加してます。
3~5行目はnumの値とendNumの値が等しかった場合実行されます。もし条件式を満たした場合ラベルendに飛び処理が終了します。
if文の条件式を満たさない場合6行目が実行されラベルroopに飛びます(戻ります)。
set fileName=aiueo%num%.txt
copy aiueoXX.txt .\%folderName%\%fileName%
1行目でfileNameにaiueo連番.txtの文字列を代入します
2行目でカレントディレクトリのaiueoXX.txtを生成したフォルダの中にfileNameの名前でコピーします。
この処理を上記の繰り返し処理と組み合わせることで指定数ファイルをコピーします。
今回は以上です。はじめてbatファイルを書いたので変な書き方してるかもしれないです。指摘点などあればぜひ教えてください。