2016-06-27 36 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,然後用%%b代替%path%)使其工作,但是它只會將文件複製到最後一個子目錄,而不是所有這些文件都是由於我如何使用那裏的set命令。

我需要一些指針,我似乎無法讓它做我想做的事。任何和所有的指針表示讚賞!萬分感謝!

+0

'Source'(和'Destination')只包含一級子目錄嗎? – aschipfl

+0

不知道移動部分有多重要(複製也可以)。無論如何,請嘗試查看xcopy和robocopy命令。最壞的情況下,你可以將他們的輸出重定向到一個文本文件並在之後刪除文件。 –

回答

0

我知道你有這個標記爲一批,但@FlorianStraub提到的,你可以使用robocopy鏡像一個目錄到另一個:

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

爲了打破這種命令下來:

  • *.*說複製所有文件
  • "C:\src"是你的源碼目錄,而
  • "C:\dest"是您的目的地目錄。
  • 末尾的/E標誌表示遞歸複製所有文件夾,幷包含空文件夾。

嘗試從命令行運行robocopy /?以查看更多選項。

如果您的dest目錄中有多餘文件需要刪除,請使用/MIR標誌將您的源目錄一對一鏡像到目標中。也就是說,它會刪除目標中源文件中不存在的任何文件。

相關問題