好きこそものの上手なれ

他人から見れば、下手の横好きですが、そっと見守ってください。

DOSコマンドで深い階層にある特定の拡張子(.zip)を任意のフォルダにコピーする

人生やり直し隊ニャン

DOSコマンドで深い階層にある特定の拡張子(.zip)を任意のフォルダにコピーする



手動で、いちいちフォルダを辿ってコピーするのは手間ですのよね。
それを行うDOSのバッチファイル(コマンド)です。
for /r を使います。


調べるフォルダ : C:\source
この下の深い階層も辿って調べる


コピー先の1フォルダ:C:\destination\


@echo off
for /r "C:\source" %%i in (*.zip) do copy "%%i" "C:\destination\"



for /r の仕組み

基本構文

for /r [検索開始フォルダ] %変数 in (検索条件) do コマンド
  • /r: 再帰的にサブディレクトリも含めて検索します。
  • [検索開始フォルダ]: 検索を開始する基準となるフォルダのパス。指定しなければ現在のディレクトリが基準になります。
  • %変数: 見つかったファイルやディレクトリを格納するための変数(例えば %i など)。
  • (検索条件): 検索するファイルの条件(例: *.zip は ZIPファイル)。
  • do コマンド: 検索結果に対して実行するコマンド。

実行例

例えば、以下のようにコマンドを実行すると:


for /r "C:\source" %i in (*.zip) do echo %i
  • C:\source フォルダ以下を再帰的に検索します。
  • 拡張子が .zip のファイルをすべてリストアップして、結果を echo で出力します。

for /r がポイントな理由

  1. 再帰的な検索を一行で実現

    • 通常、DOSコマンドではサブフォルダを手動で一つずつ指定するのは非常に手間ですが、for /r を使うことで全サブフォルダを自動で巡回できます。
  2. フィルタリング機能

    • (検索条件) にファイル名や拡張子を指定することで、対象ファイルを絞り込めます。
  3. 柔軟な処理

    • do の後に好きなコマンドを指定できるので、コピーや移動、圧縮、リネームなどさまざまな操作が可能です。

応用例

1. ZIPファイルの移動(元ファイルを削除)

for /r "C:\source" %i in (*.zip) do move "%i" "C:\destination\"

2. ZIPファイルのリストをファイルに保存

for /r "C:\source" %i in (*.zip) do echo %i >> zip_list.txt

3. 特定のフォルダ以下にZIPファイルがなければ通知

set found=false
for /r "C:\source" %i in (*.zip) do set found=true
if "%found%"=="false" echo ZIPファイルが見つかりませんでした。



for コマンドが使いこなせると、簡単な自動化スクリプトが書けるようになります。さらに柔軟な処理が必要なら、PowerShellやPythonなどに移行するのも良い選択肢です。