web-dev-qa-db-ja.com

フォルダのコンテンツを1レベル上にバッチ移動する

場合によっては簡単な作業ですが、上に移動したい数百のフォルダ内に数千のファイルがあります。

ディレクトリ構造は次のようになります:

_C:\Photos\subject\randomnumbers\images\file.ext_

これで終わりたい:

_C:\Photos\subject\randomnumbers\file.ext_

for /r %i in ("*\images\*.*") do move *\*.*を実行してみましたが、期待どおりに動作しません。

これを手動で行う以外の方法は考えられません。手動で実行しても問題はありませんが、必要に応じて開始できる自動操作で大きなメリットが得られます。

それは可能であり、誰でもこれを手伝ってくれる?

5
HASJ

これはあなたのために働くはずです:

for /r %i in ("images\*.*") do move %i %~pi..
  • %~piは、%i\で終わる)からパスを抽出します
  • ..は、上記のパスが親ディレクトリを指している後に配置されます

もちろん、サブディレクトリに競合する名前のファイルがある状況には対応しません。

4
techraf

これはあまり洗練されていないので、人々はより良​​い解決策を思いつくと思いますが、ここに簡単な解決策があります:

  1. *の単純な(エクスプローラー)検索を実行して、移動先のフォルダーから始めます。完了するまでに30分程度かかる場合があります。
  2. 結果をパスで並べ替え
  3. 移動先のフォルダーにまだないすべてのファイル(移動するファイル)を選択します(これらは既存の「数千のディレクトリ」になります。ソート後にすべて一緒になるため、「クリック」して「Shift +クリックしてください。
  4. それらを左側のフォルダー構造ツリーにドラッグし、ターゲットフォルダーにドロップします。
  5. 移動中にコーヒーを飲んだり、その他の作業を行ったりします。 Windowsは通常、ハードウェアに応じて、1秒あたり40〜7000ファイルを移動できます。
  6. 空のディレクトリをすべて選択して削除します。

*.jpg,*.pngなどの特定のファイルタイプのみが必要な場合は、ステップ1 フィルターありも実行できることに注意してください。

2
Aganju

フォルダのコンテンツを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

その他のリソース

2
Pimp Juice IT

これを行う別の方法を見つけました...より多くの時間と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個のフォルダーを使用してこれを正常に実行しました。今では毎週くらい使っています。

0
bmcelvan

パワーシェル:

$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}
0
Keith Miller