大量に溜まったデータのなかから、特定の文字列を名前に含んだファイルを別のフォルダに移動させたい場合があると思います。これをひとつひとつ手作業で行うのは大変です。こんなとき、バッチファイルでワイルドカードを使えばダブルクリック一回で済ますことができます。
バッチファイルの書き方
まずは基本のおさらいから。メモ帳のようなテキストエディタを開き、次のようにソースコードを記入します。移動したデータのあるフォルダに拡張子を .bat として保存してください。文字コードは Shift-JIS、改行コードは CR + LF です。
1 2 3 4 5 6 7 8 9 10 | @echo off cd /d %~dp0 rem 途中経過を出力 echo テストです。 rem 空白行 echo: rem 実行後、コマンドプロンプトを表示 cmd /K |
エコー機能を無効にする
1 | @echo off |
コマンドプロンプトにはエコー機能というものが付いており、これはバッチファイルを実行するたびに中身のソースコードを画面に表示するというものです。これを毎回表示するのは結構わずらわしいので、冒頭でこの機能をオフにするのが定番です。
バッチファイルが置かれている場所をカレントディレクトリに
1 | cd /d %~dp0 |
この一行によって、バッチファイルを置いた場所でダブルクリックすれば一発で実行できるようになるわけですね。
コメントアウト
1 | rem おまじない |
rem を先頭に付けた行はコメント行になります。コメント行はバッチファイルの実行に影響を及ぼさないので、メモのかわりに存分に使ってください。一ヶ月前に書いたソースコードは別人のものと思うべし。
ちなみに、コメント行は GOTO を使ったラベルの応用として、次のように記述することができます。
1 | : おまじない |
空白行
1 | echo: |
コマンドプロンプトへの出力結果を見やすくするために、空白行を挿入したいときがあると思います。echo のすぐ後ろにコロンを追加します。echo. や echo; などでも改行できます。
バッチファイルの実行後、勝手にコマンドプロンプトが閉じないようにする
1 | cmd /K |
試しにこの一行を削除して実行してみてください。コマンドプロンプトが一瞬だけ表示されてすぐに閉じてしまいます。バッチファイルの記述が正しければ問題ないのですが、処理の途中経過を echo で出力している場合に確認ができないので、少し不便です。
実行結果
次のようになります。
ファイルを移動する
デスクトップに test というフォルダを作成し、次のようにファイルを配置しました。target フォルダはファイルの移動先です。
ファイルを移動したい場合には、次のように記述します。
1 | move (目的のファイル) (移動先のフォルダ) |
移動先のフォルダについてですが、C:\Users\user\Desktop\test のように絶対パスでフォルダのアドレスを指定することも可能です。今回はバッチファイルの置いてある場所にフォルダがあるということで、次のように指定してみました。
1 2 3 4 5 6 7 8 9 10 | @echo off cd /d %~dp0 set FOLDER=%~dp0 move そば_1.txt %FOLDER%target echo 完了しました echo: cmd /K |
set コマンドを使って FOLDER という変数にカレントディレクトリの絶対パスを代入しています。変数にアクセスするには、変数の前後を%ではさむ必要があります。
移動先フォルダの指定の仕方に少し違和感がありますが、
1 | echo %FOLDER% |
などを実行するとパスの最後に¥が自動で挿入されているので、このような指定方法になります。
実行するとコマンドプロンプトに次のように表示されます。目的のファイルがちゃんと移動していることを確認してください。
ワイルドカードを使ってみる
条件に一致する複数のファイルをまとめて移動するにはワイルドカードが便利です。例えば、先頭が「そば_」というファイル名のファイルをすべて移動したい場合、次のように指定します。
1 | move そば_*.txt %FOLDER%target |
拡張子が .html のファイルをすべて移動したい場合は次のようになります。
1 | move *.html %FOLDER%target |
ファイル名の途中に「そば」があった場合
次のような場合に先ほどのバッチファイルを実行すると、移動できるのは「そば_4.txt」と「そば_5.txt」だけです。
ファイル名の途中に該当する文字列があるファイルを移動するには、次のように改良します。
1 | move *そば_*.txt %FOLDER%target |
ワイルドカードである*は0文字以上の任意の文字列を意味するので、冒頭に文字がないファイルもこの記述で指定することができます。
Comment