場合によっては簡単な作業ですが、上に移動したい数百のフォルダ内に数千のファイルがあります。
ディレクトリ構造は次のようになります:
_
C:\Photos\subject\randomnumbers\images\file.ext
_これで終わりたい:
_
C:\Photos\subject\randomnumbers\file.ext
_
for /r %i in ("*\images\*.*") do move *\*.*
を実行してみましたが、期待どおりに動作しません。
これを手動で行う以外の方法は考えられません。手動で実行しても問題はありませんが、必要に応じて開始できる自動操作で大きなメリットが得られます。
それは可能であり、誰でもこれを手伝ってくれる?
これはあなたのために働くはずです:
for /r %i in ("images\*.*") do move %i %~pi..
%~pi
は、%i
(\
で終わる)からパスを抽出します..
は、上記のパスが親ディレクトリを指している後に配置されますもちろん、サブディレクトリに競合する名前のファイルがある状況には対応しません。
これはあまり洗練されていないので、人々はより良い解決策を思いつくと思いますが、ここに簡単な解決策があります:
*
の単純な(エクスプローラー)検索を実行して、移動先のフォルダーから始めます。完了するまでに30分程度かかる場合があります。*.jpg,*.png
などの特定のファイルタイプのみが必要な場合は、ステップ1 フィルターありも実行できることに注意してください。
フォルダのコンテンツを1レベル上にバッチ移動します
これは、MoveFromDirが移動するその中のコンテンツを開始するディレクトリであり、MoveToDirは、これらのコンテンツがMoveFromDirから1レベル上に移動されるディレクトリの明示的なパスであるため、これらの変数を適宜設定する必要があります。
すべてのフォルダとファイルをMoveFromDirの下にあるMoveToDirに移動します
次の2番目のFORループのみを実行することに注意してください:
FOR /F "TOKENS=*" %%A IN ('DIR /S /B "%MoveFromDir%\*.jpg"')
MoveToDirに移動するファイル拡張子のみを指定できます(例:jpg)
@ECHO ON
SET MoveToDir=C:\Photos\subject\randomnumbers
SET MoveFromDir=C:\Photos\subject\randomnumbers\images
:: Move the folders from the move directory to the move to directory
FOR /D %%A IN ("%MoveFromDir%\*") DO MOVE /Y "%%~A" "%MoveToDir%"
:: Move any remaining files (or folders) from the move directory to the move to directory
FOR /F "TOKENS=*" %%A IN ('DIR /S /B "%MoveFromDir%\*.*"') DO MOVE /Y "%%~A" "%MoveToDir%\"
GOTO EOF
これを行う別の方法を見つけました...より多くの時間とHDDスペースが必要ですが、最下位レベルのディレクトリ名を知らなくてもこれを行うことができます。したがって、最下位レベルのフォルダーが「画像」という名前であることを知る必要はなく、文字通り何でもかまいません。
たとえば、1、2、3、4、5などの名前のフォルダーがたくさんあり、それらすべてのフォルダーの中に、ファイルを含むフォルダーがさらにありました。特定のルートフォルダー(1、2、3、4、5など)のすべてのファイルを最上位のフォルダー(1、2、3、4、5など)に移動したいと思っていました。 WinRARを使用すると、圧縮に「store」を使用して処理時間を最小限に抑えることで、すべての最上位フォルダー(1、2、3、4、5など)をZip圧縮できることがわかりました。次に、右クリックボタンメニューを再度使用して、「各アーカイブを個別のフォルダに抽出」するだけで解凍しました。解凍を行う前に、Extract-> Advanced Menu-> File Paths: "Do not extract path"の設定でWinRARに「設定を保存」する必要があり、すべてのZipファイルは、すべてのファイルを含む独自のフォルダーに解凍されました(トップレベルのフォルダ/サブフォルダがどのように内部にあっても)。
私は一度に2350個のフォルダーを使用してこれを正常に実行しました。今では毎週くらい使っています。
パワーシェル:
$source = 'C:\Photos\subject\randomnumbers\images'
Get-ChildItem $source -file | move-item -Destination {$_.Directory.Parent.Fullname}
ワイルドカードを使用してすべてを処理するrandonmnumbers:
$source = 'C:\Photos\subject\*\images'
Get-ChildItem $source -file | move-item -Destination {$_.Directory.Parent.Fullname}