コスパ重視で生きたい人生だった

なるべく楽して生きて行きたい30代サラリーマンのブログ

コマンドプロンプトでサブフォルダ内から特定のファイルだけを選んでコピーする

f:id:dett0826:20120404014925j:plain

サブフォルダがたーくさんあって、各々のフォルダから特定のファイルだけ取り出したいとき、ありますよね。
ぼくはありました。

でも、いちいち、フォルダを開ける→目的のファイルを選択してCtrl+C→コピー先のフォルダを選んでCtrl+V→元のフォルダに戻って→一階層上がって→また別のフォルダを開けて→・・・
と繰り返すのはしんどい。

というわけで、たくさんあるサブフォルダから特定のファイルをまとめてコピーする方法を紹介します。

コマンドプロンプト+バッチファイルで簡単に実現

以下のコマンドでバッチファイルを作るだけ。
簡単。
バッチファイルの作り方は、以下のコマンドをメモ帳にコピペして保存。
保存したファイルの拡張子(.txt)を.batに変更するだけ。楽勝。

set /p TARGET_DIR="対象フォルダを入力してください >"

echo %TARGET_DIR% を対象に作業実施します。
pause
pushd %0\..
mkdir "%TARGET_DIR%"\"作業"



dir /ad /b "%TARGET_DIR%" > dir.txt

for /F %%i in ( dir.txt ) do copy "%TARGET_DIR%"\%%i\"*.txt" "%TARGET_DIR%"\"作業"

echo 作業完了しました。

pause

exit

各コマンドの解説

set /p TARGET_DIR="対象フォルダを入力してください >"

echo %TARGET_DIR% を対象に作業実施します。
pause

これによって、コピペを行いたいフォルダ&サブフォルダを毎回指定できます。
使いまわしがきく!

mkdir "%TARGET_DIR%"\"作業"

サブフォルダがある場所と同じ階層に「作業」フォルダを作成し、ここにファイルをコピペしていきます。

dir /ad /b "%TARGET_DIR%" > dir.txt

dirコマンドで最初に入力した対象フォルダ配下にあるサブフォルダの一覧を作成します。

dir /ad /b "%TARGET_DIR%" > dir.txt

for /F %%i in ( dir.txt ) do copy "%TARGET_DIR%"\%%i\"*.txt" "%TARGET_DIR%"\"作業"

あとはforコマンドでサブフォルダ配下にある.txtファイルをすべて繰り返しコピペするだけ。

これでだいぶ作業が楽になりました。

今回は拡張子で対象ファイルを絞りましたが、例えば「*201607*」とすれば特定の日付がファイル名に入っているファイルのみコピペすることができます。
いろいろ応用はきくはずなので、環境に合わせて工夫してみてください。

それではまた。

[改訂新版]Windowsコマンドプロンプトポケットリファレンス

[改訂新版]Windowsコマンドプロンプトポケットリファレンス