2009-12-07 199 views
1

我有一個批處理文件,它循環訪問文本文件的內容並使用xcopy命令複製特定文件。批處理文件XCopy命令

這是摘錄。

for /f %%a in (FilesToCopy.txt) do (
xcopy ..\..\Common\%%a Common\%%a /i /d /c /v /s /y /f 
xcopy Common\%%a ..\..\Common\%%a /i /d /C /v /s /y /f 
) 

%%一個包含了諸如 圖片\ image1.jpg 影像\ image2.jpg值

所以當執行XCOPY它看起來像

xcopy ..\..\Common\Images\image1.jpg Common\Images\image1.jpg /i /d /c /v /s /y 

執行時會再提示此消息

Does Common\Images\image1.png specify a file name 
or directory name on the target 
(F = file, D = directory)? 

看來, /我的命令不工作,或者我錯過了一些東西來壓制上面的消息。

回答

4

好吧,你離開了聲明幫助提供有關/I

/I   If destination does not exist and copying more than one file, 
      assumes that destination must be a directory.

你永遠只能複製一次一個文件,所以/I不適用。

你或許可以通過管道F到命令和抑制輸出下鍋解決這個:

echo F|xcopy ..\..\Common\%%a Common\%%a /i /d /c /v /s /y /f >nul 

(不能在非英語版本的Windows的工作;但也許這就是至少你的問題,鑑於批次已經失敗與空格:-)文件名)

你可以嘗試建立文件名的一個長長的清單複製:

setlocal enabledelayedexpansion enableextensions 
set LIST= 
for /f %%a in (FilesToCopy.txt) do set LIST=!LIST! "..\..\Common\%%a" 
xcopy %LIST% Common /i /d /c /v /s /y /f 

雖然這需要兩遍以上的初始文件。並且當文件名列表超過8190個字符時失敗。

+0

好點的黑客的事情,我會盡力解決方案壽... ,你可以看到有一個時間戳檢查/ d有這麼/ d手段複製僅如果目標是老年人。 因此,如果commandA的源代碼版本比目標版本更新,那麼它將替換它,反之亦然。 – Juvil 2009-12-07 08:42:00

+0

啊,沒有刻意去那裏解剖開關詳細,對不起:-) – Joey 2009-12-07 09:26:16

1

目標應該是路徑,那麼它會不會問:

xcopy ..\..\Common\Images\image1.jpg Common\Images\ /i /d /c /v /s /y 

在你的情況,你可以對目標使用路徑萃取%〜p,因爲您可能希望保留:

xcopy ..\..\Common\%%a Common\%%~pa /i /d /c /v /s /y 
+0

是的,這會工作,但隨後你可以看到有一個原因,它的我使用的文本文件,並保存它%% a,那樣我就會有一個動態的目的地路徑。圖像並不是那裏唯一的預期路徑。 – Juvil 2009-12-07 08:46:54

+0

好點。我更新了我的答案,以表明您可以從文本文件中的項目中提取路徑。 – 2009-12-07 09:36:11