批处理文件XCopy命令

Juv*_*vil 1 command-line copy 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 
)
Run Code Online (Sandbox Code Playgroud)

%% a包含像Images\image1.jpg Images\image2.jpg这样的值

因此当执行xcopy时,它看起来像

xcopy ..\..\Common\Images\image1.jpg Common\Images\image1.jpg /i /d /c /v /s /y
Run Code Online (Sandbox Code Playgroud)

执行后,它会提示此消息

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

似乎/ i命令没有工作或我在这里遗漏了一些东西来压制上面的消息.

Joe*_*oey 5

好吧,你遗漏了帮助给出的第二个陈述/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
Run Code Online (Sandbox Code Playgroud)

(不适用于非英语版本的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
Run Code Online (Sandbox Code Playgroud)

但是,这需要在初始文件上进行两次传递.当文件名列表超过8190个字符时,它会失败.