2016-06-27 10 views
1

タイトルの記載内容を行う良い方法を見つけられないようです。さまざまなサブディレクトリにあるすべてのファイルを、サブディレクトリ名が一致する別のディレクトリに移動する必要があります。私が取り組んできたコードは次のとおりです。複数のサブディレクトリにあるファイルを、サブディレクトリ名が一致する別のディレクトリにコピーします。

@echo off 
IF EXIST path.txt del /f path.txt 
:: Above line for test only 

for /f %%i in ('DIR /a:d /b "C:\ProgramData\Test\WTM\Source"') do (
    echo %%i >>path.txt 
) 
::Pull sub-directory name from working folder 

for /f "delims=" %%a in ('DIR /s /a-d /b "C:\ProgramData\Test\WTM\Source"') do (
    for /F %%b in (path.txt) do (
     move /y "%%a" "C:\ProgramData\Test\WTM\Destination\%%b\*.*" 
    ) 
) 
PAUSE 

私は(いくつかの時間までの時間から先から欠落することができるように)サブディレクトリ名を引っ張っているやろうとしています、のすべてを見つけますファイルをソースディレクトリ内に移動し、以前に引っ張ったサブディレクトリ名を使用して、それぞれのサブディレクトリ名の下の宛先ディレクトリにファイルを移動します。だから、

C:\ProgramData\Test\WTM\Source\123\123.txt, 
C:\ProgramData\Test\WTM\Source\456\9681.txt, 
C:\ProgramData\Test\WTM\Source\789\1941.txt, 
etc... 

を引っ張り、

C:\ProgramData\Test\WTM\Destination\123\123.txt, 
C:\ProgramData\Test\WTM\Destination\456\9681.txt, 
C:\ProgramData\Test\WTM\Destination\789\1941.txt, 
etc... 

にそれらのファイルを移動する私のコードが正しく実行されることはありませんし、エラーは、私が変更内容によって異なりますが、通常、私は%%bがサブとして渡すことが取得することはできませんディレクトリ名ではなく、%bであるか、またはパラメータを使用して動作させることができます(set %%i = pathを設定して%path%%%bを置き換えます)。しかし、ファイルを最後のサブディレクトリにコピーします。そこにはsetコマンドがあります。

私はいくつかのポインタが必要です、私はそれが私が欲しいものをすることができないようです。すべてのポインタが評価されています!ありがとう、トン!

+0

'Source'(と' Destination')には1つのレベルのサブディレクトリしかありませんか? – aschipfl

+0

移動部分の重要性がわかりません(コピーもOKです)。とにかく、xcopyコマンドとrobocopyコマンドを調べてみてください。最悪の場合は、出力をテキストファイルにリダイレクトしてからファイルを削除することができます。 –

答えて

0

私はあなたがこのバッチとしてタグ付けされている知っているが、@FlorianStraubが述べたように、あなたは別のディレクトリにミラーリングするrobocopyを使用することができます。このコマンドを打破するには

robocopy *.* "C:\src" "C:\dest" /E 

を:

  • *.*すべてのファイルをコピーするように言われています
  • "C:\src"はあなたのソースディレクトリです、そして、
  • "C:\dest"が目的のディレクトリです。
  • 末尾の/Eフラグは、すべてのフォルダを再帰的にコピーし、空のフォルダを含むことを示します。

さらに多くのオプションを表示するには、コマンドラインからrobocopy /?を実行してみてください。

destディレクトリに余分なファイルがある場合は、/MIRフラグを使用して、1対1でソースディレクトリをコピー先にミラーリングします。つまり、ソース内にも存在しないファイルが、そのファイル内で削除されます。

関連する問題