2009-12-07 222 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