5

我有一个简单的 xcopy 脚本,我从命令行运行,它读取目录和文件名的 CSV 文件。我以前使用过一个非常相似的脚本,没有任何问题。这是脚本:

Z:\HOME\>for /f "delims=, tokens=1,2,3,4" %i in (Z:\HOME\MissingImages.csv) do
echo f | xcopy "Y:\%j\%k\%l" "C:\Horizon\%j\%k\%l" >> Z:\HOME\MissingImagesLog.txt

但是,它不会复制任何文件。这是日志文件中的一个条目:

Does C:\Horizon\K\00\6bef500f.IMG  specify a file name
or directory name on the target
(F = file, D = directory)? f
0 File(s) copied

它正在查找图像,因为如果我将根目录更改为其他目录,脚本只会0 File(s) copied为所有条目填充日志文件,因此文件在那里并且可以看到......

此外,Z:\驱动器在网络上而不是本地,但我再次在网络上使用了一个非常相似的脚本,没有问题(它只需要更长的时间)。

我尝试了不同的选项,例如/i,/s等,但我似乎无法让它复制任何文件。

4

3 回答 3

11

如果您在路径中使用正斜杠“/”而不是反斜杠“\”, xcopy 也会报告0 File(s) copied,但前提是您已将路径括在引号中。

  1. 这失败了“复制了0个文件”

    xcopy "pathname1/file" pathname2\file
    
  2. 这因“参数数量无效”而失败

    xcopy pathname1/file pathname2\file
    
  3. 这工作得很好

    xcopy pathname1\file pathname2\file
    
于 2012-09-20T01:39:47.317 回答
1

好吧,这很烦人;我发现了这个问题。看起来当我生成我的 CSV 文件时,它在每行的末尾放了一个空格,所以 xcopy 正在寻找扩展名后有空格的文件。

让我失望的是它正在查找文件,但无法复制它们,让我认为这是网络或 xcopy 问题。

我刚刚运行了一个 sed 脚本来删除 eol 空格,并且 xcopy 脚本现在按预期工作。

于 2011-03-03T20:55:23.857 回答
1

它询问是因为它不知道您是要复制到目录(要创建)还是您提供完整的目标路径名。这会问:

xcopy pathname1\file.from pathname2\file.to

但是,添加斜杠会告诉您复制到目录:

xcopy pathname1\file.from pathname2\to\

但我还没有找到明确告诉我要复制和重命名文件的方法,除了

echo Y | xcopy pathname1\file.from pathname2\file.to

我对您的案例(使用fordoxcopy)进行了一些尝试,发现即使它询问是否 SOMEFILE 在目标上指定文件名或目录名(F = 文件,D = 目录)?它由echo提供f并成功复制。因此,指定文件/目录不是问题,而是通过网络本身进行复制。

于 2011-03-03T20:36:25.093 回答