web-dev-qa-db-ja.com

CMDを使用して、特定の拡張子を持つすべてのファイルをすべてのサブディレクトリからその親に移動する方法は?

フォルダc:\folder1にはsubfolder1subfolder2などが含まれます。

これらのサブディレクトリは.pdfおよび.dbファイルを保持します。

Windowsコマンドインタープリターを使用して、すべての.pdfファイルをc:\folder1に移動するにはどうすればよいですか?

18
mihai

これは私のために働きました:

for /r "c:\source_directory\" %%x in (*.pdf) do move "%%x" "c:\target_directory\"

このコマンドは、Windows 7でcmdを使用してソースからターゲットディレクトリに再帰的にすべてのPDFファイルをコピーします-テスト済みで動作します。

それが役に立てば幸い。

21
pablo M

外側のforループは作業ディレクトリ内のサブディレクトリを一覧表示し、内側のforループは宛先パスに移動するサブディレクトリを一覧表示します。

for /d %f in (*.*) do for /d %e in (%f\*.*) do move "%e" DestinationPath

これは、DestinationPathがそれ自体に移動しようとするため、DestinationPathが作業ディレクトリのサブフォルダーでない場合に最適に機能します。

大量に実行する前にコマンドを確認するには、次のように最後のmoveコマンドをエコーすることから始めます。

for /d %f in (*.*) do for /d %e in (%f\*.*) do echo move "%e" DestinationPath

結果の1つをコピー/貼り付けして実行し、期待どおりに機能したことを確認します。次に、エコーを取り除き、動き始めます。

6
Craig Nichols

サブフォルダーで機能するワイルドカードはないと思うので、ループを使用して各サブフォルダーを通過し、*。pdfを移動します。

FOR /R [your root folder path] %%G IN (*.pdf) DO move %%G [new path]

DOの後のコマンドは、本質的に独自の引用符で囲まれています。ソースまたは宛先にスペースが予想される場合は、二重引用符を使用してそれらをカプセル化します。例:

FOR /R "source folder with spaces" %%G IN (*.pdf) DO move "%%G" "dest path with spaces"

%% Gの前後の引用符に注意してください。これらはmoveコマンドがパスを解決するために必要です。

**編集:受け入れられた回答への応答として、WindowsのコマンドプロンプトXPおよびWindows 7のそれぞれ:

command prompts

これは、ワイルドカードがパスでは機能せず、単一のディレクトリ(C:\ folder * .filesなど)内のファイルに対してのみ機能することを示しています。コマンドプロンプトは、ワイルドカードを検出しても再帰的には動作しません。

5
Eaglebird

Windowsエクスプローラーでこれを行う別の方法があります(コマンドプロンプトではなくGUI):

  • 最上位のディレクトリに移動します
  • 右上の検索ボックスに* .pdfと入力し、検索をクリックします
  • すべてのファイルを選択し、最上位のフォルダにドラッグします
  • ファイルの上書きに関するプロンプトに応答します
4
Will Sheppard

私はこれがスーパーレートであることを知っていますが、万一に備えて.

これを使用して、すべてのサブフォルダーで.MKVファイルを検索し、バッチファイルが存在する現在のディレクトリに移動します。

FOR /D /r %%F in ("*") DO (
    pushd %CD%
    cd %%F
        FOR %%X in (*.mkv) DO (
            move "%%X" "%CD%"
        )
    popd
)
3
Alfredo
@echo on

for /r "F:\All_drawings\newdrg\" %%x in (*.tiff) do move "%%x" "F:\Alldrawings"

pause

{newdrgフォルダーとその「サブフォルダー」からターゲットフォルダーAlldrawingsにすべてのファイルを移動します。このコマンドは、コマンドラインのバッチファイル操作用で、両方の場所で単一の「%」を使用します}。

2
subbu

Robocopyは私に不思議に思いました:

 robocopy c:\cache c:\cache-2012 ?????-2012*.hash /S /MOV

私はそれを使用して、特定のマスクを持つすべてのファイルをc:\cacheとその多数のサブディレクトリ。

2

ここでは、暗闇の中でワイルドスタブを使用していますが、覚えていると、DOSはグロブを処理でき、mvに相当するものはMOVEなので、次のようになります。

MOVE C:\FOLDER1\*\*.PDF C:\FOLDER1\

1
ido
MOVE "C:\FOLDER 1\PDF FILES\*.pdf" "C:\FOLDER 1"
MOVE "C:\FOLDER 1\DB FILES\*.db" "C:\FOLDER 1"

移動コマンドを実行すると、ソースフォルダーの後にファイルの移動先が表示されます。各ファイル拡張子の前の*は、そのディレクトリ内に存在する指定されたすべてのファイルタイプを選択するワイルドカード関数です。

また、必要に応じて、これらのコマンドで.batファイルを作成できます。これを行うには、コマンドをメモ帳に貼り付け、。txtではなく。batとして保存します。

次に、ファイルをダブルクリックすると、実行するたびにファイル内のコマンドが実行されます。これは、これを必要とする反復的なタスクがある場合に役立ちます。

1
THE DOCTOR