各ファイルのフォルダーを作成し、ファイルをフォルダーに移動するCMDコマンド


10

コマンドラインから実行できるコマンドが必要です。ディレクトリ内に(ファイル名に基づいて)各ファイルのフォルダーを作成し、新しく作成したフォルダーにファイルを移動します。

例:

開始フォルダ:

Dog.jpg
Cat.jpg

次のコマンドは、現在の作業ディレクトリにファイル名ごとにフォルダを作成するのに適しています。

for %i in (*) do md "%~ni"

結果フォルダ:

\Dog\
\Cat\
Dog.jpg
Cat.jpg

これをさらに一歩進めて、ファイルをフォルダーに移動する必要があります。

私が達成したいのは:

\Dog\Dog.jpg
\Cat\Cat.jpg

誰かがこれをすべて行うための1つのコマンドで私を助けることができますか?

回答:


10

2番目のコマンドは

for %i in (*) do move "%i" "%~ni"

編集:and31415のコメントに基づいて、%iに「」を追加しました。tnx。


4
それに続いて、A)それらを組み合わせることができますfor %i in (*) do cmda && cmdb -B)最初にエコーできますfor %i in (*) do @ECHO cmda && cmdb C)追加できるはずですサブディレクトリを通過するのは/ Rだと思います
barlop 2014年

2
このコマンドは、ファイル名にスペースが含まれている場合は機能しません。次のようなものを使用する必要for %i in (*) do move "%~i" "%~ni"があります。ターゲットフォルダーが存在しない場合に副作用が生じる可能性があるため、それでも十分ではない可能性があります(たとえば、ファイルが自分自身に「移動」され、名前が変更される)。簡単な解決策は、次のように両方のコマンドを組み合わせることです。for %i in (*) do md "%~ni" && move "%~i" "%~ni"このコマンドは、ディレクトリがまだ存在していないことを前提としています。
and31415 2014年

2
また、barlopのコメントを展開するために使用するとcmda && cmdb、成功したcmdb場合cmdaにのみ実行されます。cmda & cmdb代わりに使用する場合、2番目のコマンドは関係なく実行されます。実際、単一のアンパサンド(&)は単なるコマンドセパレータであり、二重のアンパサンド(&&)は条件付きのアンパサンドです。errorlevel値を設定しないコマンドは、後者では使用しないでください。
and31415 2014年

5

これらのコマンドを順番に実行するだけです。

各ファイルのフォルダーを作成するには:

for %i in (*) do mkdir "%~ni"

各ファイルをそのフォルダーに移動するには:

for %i in (*) do move "%i" "%~ni"

1
スーパーユーザーへようこそ!これは別の回答を複製し、新しいコンテンツを追加しません。あなたが実際に貢献する何か新しいものがない限り、答えを投稿しないでください。
DavidPostill

-1

これは、次のようなフォルダがある場合に実行されます。例:years \ Filename.mp4

1901\Filename.mp4 
1902\Filename.mp4
1903\Filename.mp4

すべてのフォルダーの第1レベルファイルが一覧表示されます。すべての* .mp4と* .mkvがリストされ、ファイル名を持つ2レベルのフォルダーが作成され、1レベルのフォルダー内のすべての同じ名前のファイルが2レベルのフォルダーに移動され、年ベースのフォルダーで実行されます。

for /d %D in (*) do for %i in (%~fD\*.mp4,%~fD\*.mkv) do mkdir "%~dpi%~ni" && move "%~dpi%~ni.*" "%~dpi%~ni\"

第1レベルのYEARSフォルダーがない場合は、最初のフォルダーをバイパスして2番目のステップを実行し、ファイル名ベースフォルダーで実行できます。

for %i in (*.mp4,*.mkv) do mkdir "%~dpi%~ni" && move "%~dpi%~ni.*" "%~dpi%~ni\"

&&は、ファイルの移動を実行するために、以前のmkdir%ERRORLEVEL%が0であることを確認します

テストするには、これを使用します:

for /d %D in (*) do for %i in (%~fD\*.mp4,%~fD\*.mkv) do echo "%~dpi%~ni" && echo "%~dpi%~ni.*" "%~dpi%~ni\"

左のファイルを探すための:/ D%Dで(*)%のために行うI IN(%〜fDの\ *)やるエコー"%〜のdpi%〜Fiの"
Olívioモウラ

/ D%D(*)で行うため%のI(%〜fDの\ *)DO移動"%〜Fiの" "Dで:\ TRASH \"
Olívioモウラ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.