通常、親フォルダーを開いて*
を検索して、サブフォルダー内のすべてのファイルを選択しますが、この場合、1,000,000を超えるファイルを並べ替える必要があるため、エクスプローラーを試行するとクラッシュすることがよくありますGUIを介して多くのファイルをコピーします。コマンドプロンプトまたはバッチファイルを使用すると、これがどれほど効果的かはわかりませんが、試してみる価値はあると思います。
私がする必要があるのは、
|parent
| |123
| | 123abc.png
| |456
| | 456def.png
| |789
| | 789ghi.png
なる
|parent
| 123abc.png
| 456def.png
| 789ghi.png
はい、実際のファイル構造では、フォルダ名に付けられたファイル名の最初の3文字が含まれています(並べ替えに役立つ場合)。
コマンドプロンプトで FOR/R を使用します。
[FOR/R]は、[drive:] pathで始まるフォルダーツリーをたどり、一致する各ファイルに対してDOステートメントを実行します。
まず、ファイルの移動元の親フォルダーのステージングフォルダーoutsideを作成します。これにより、循環参照の可能性が回避されます。
あなたの場合、コマンドは次のようになります:
FOR /R "C:\Source Folder" %i IN (*.png) DO MOVE "%i" "C:\Staging Folder"
これをバッチファイルに入れたい場合は、%i
から%%i
。
二重引用符が重要であることに注意してください。それらのいずれかを見逃さないでください。スペースを含むファイル名が正しく処理されるようにします。
移動が完了したら、必要に応じてステージングフォルダーの名前を変更/移動できます。
ヒント:ハードドライブの空き容量があり、時間がある場合は、何か問題が発生した場合に備えて、ファイルを移動するのではなく、安全に再生し、ファイルをcopyすることをお勧めします。上記のコマンドでMOVE
をCOPY
に変更するだけです。
これはいくつかのサンプルコードです:
:loop
for /d %%D in (%1\*) do (move "%%D\*" %1\ && rmdir "%%D")
SHIFT
set PARAMS=%1
if not %PARAMS%!==! goto loop
このバージョンでは、サブフォルダーを削除するフォルダーをバッチにドラッグすると、すべてのファイルがサブフォルダーから親フォルダーに移動します。私は、ランダムにサブフォルダーを持っている、または持っていないダウンロードされたアーカイブファイルに使用します。心に留めておいてください、それは私のケースに固有のように、単一のサブフォルダーを念頭に置いて作られました。
'Shift'は、スクリプトで一度に多数のサブフォルダーをドラッグしたときに、次の引数に移動することです。
また、ファイルがあるフォルダーを参照する環境変数%%〜dpiを使用します。その後、ファイルの親フォルダーを取得する末尾のバックスラッシュを取り除くことができます。以下はそれだけです。
SetLocal EnableDelayedExpansion
FOR /R "C:\Source Folder" %%i IN (*.png) DO (
Set "CurrFile=%%~i"
Set "TMPdp=%%~dpi"
Set "ParFldr=!TMPdp:~0,-1!"
@Echo MOVE "%%~i" "!ParFldr!" ) & REM Delete echo to move. Run to test.
!動的拡張を有効にし、%%〜iおよびParFldrに使用できます。したがって、%%〜iは!CurrFldr!一部のファイルには文字列が含まれるため、テスト中に実際に必要になります。好きではないということは、スクリプトが失敗して終了することを意味します。わかりやすくするために、%% Aをすべて%% iに変更しました。 Aが使用されていても小文字が使用されていても、まったく違いはありません。問題は一貫して同じ文字を使用しているため、%% Aをすべて%% iに変更しました。
forfiles /s /m *.FILETYPE /c "cmd /c move @file .."
は、指定されたFILETYPEのファイルを親フォルダに移動する必要があります