【问题标题】:Windows XP Batch IF & XCOPYWindows XP 批处理 IF & XCOPY
【发布时间】:2013-04-30 19:51:27
【问题描述】:

我一直在努力尝试让以下(示例)批处理文件在 Windows XP SP3 上运行。 IF NOT EXIST 部分似乎有效,但尽管在XCOPY 上使用了/I 标志,但我仍然收到"Does <path\filename.ext> specify a file name or directory name on the target" 消息:

    @IF NOT EXIST "\\SERVER\PATH\TO\FILE DIR" (
      MKDIR "\\SERVER\PATH\TO\FILE DIR"
      XCOPY "\\SERVER\PATH\TO\ORIG FILE\FILE TEMP.XLSM" "\\SERVER\PATH\TO\FILE DIR\FILE FINAL.XLSM" /I
    ) ELSE (
      XCOPY "\\SERVER\PATH\TO\ORIG FILE\FILE TEMP.XLSM" "\\SERVER\PATH\TO\FILE DIR\FILE FINAL.XLSM" /I
    )

我的理解是,使用/I 开关,XCOPY 应该创建不存在的目录结构 - 至少在我不指定文件名时它会创建。不幸的是,对于这个项目的要求,我必须指定一个文件名并且不能保留原始文件,因为它是一个模板文件,每天都会通过自动化流程进行操作。

因此,我尝试通过检查路径是否存在来解决XCOPY 和目录路径不存在的问题,如果不存在,则使用MKDIR 命令创建它,然后复制文件- 但是XCOPY 仍然提示目标是文件还是目录,这没有意义,但也许我遗漏了一些东西。

需要明确的是,这是在 Windows XP SP3 上。

有什么想法吗?

【问题讨论】:

    标签: if-statement batch-file windows-xp mkdir xcopy


    【解决方案1】:

    您可能会发现这样做更容易:

    md "\\SERVER\PATH\TO\FILE DIR" 2>NUL
    copy "\\SERVER\PATH\TO\ORIG FILE\FILE TEMP.XLSM" "\\SERVER\PATH\TO\FILE DIR\FILE FINAL.XLSM"
    

    初始的 'md' 将尝试创建目录。如果它已经存在,它将向 STDERR 输出错误消息。 2>NUL 将其重定向到 Windows 的内置“空设备”,也就是说,它只是吞下错误消息。假设您具有适当的权限,您可以确定该目录现在存在。

    复制命令只是复制您的文件。无需使用 xcopy 来复制单个文件 - 这既矫枉过正,也充满了小问题,比如提示它是文件还是目录。

    【讨论】:

    • 我没有使用COPY,因为我上次尝试使用 UNC 路径时它抛出了一个错误并且不允许我这样做。也就是说,我刚试过这个,它有效。我的理解是XCOPY 更适合在 NTFS 卷之间复制文件 - 显然这是不正确的。我责怪我的 IT 组织。
    • 很高兴你能成功。一般来说,xcopy 最适合用于复制整个目录树,而copy 可以很好地复制文件。 :-) 不要忘记将您的问题标记为已回答!
    【解决方案2】:

    由于在复制之前目标文件不存在,xcopy 不确定它是否需要创建一个名为“FILE FINAL.XLSM”的新目录,并将文件放入其中。顺便说一句,由于您已经创建了目标目录,因此您不需要 xcopy 上的 /I。这里有几种方法可以做你想做的事:

    1. 回声 F | xcopy ....(将“F”答案提供给 xcopy)
    2. copy ....(您不需要对单个文件使用 xcopy)

    【讨论】:

      【解决方案3】:
       echo f|XCOPY "\\SERVER\PATH\TO\ORIG FILE\FILE TEMP.XLSM" "\\SERVER\PATH\TO\FILE DIR\FILE FINAL.XLSM"
      

      应该复制文件并创建目录。不知道为什么指定“这是一个文件”的选项不可用,但是 RTFM - /i 开关仅在您复制多个文件并指定 \ 作为最后一个字符时才有效目标名称告诉XCOPY,无论如何目标都是目录名称,因此/i 是多余的。

      但是,如果您遵循copy 路线,请小心。一般来说,最好使用copy /b,因为普通的copy 可能无法正确复制某些文件类型(如.MPG)——它可能会在第一个^Z 处停止。不过copy /b 看起来很安全。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-12-02
        • 2017-10-06
        • 2010-12-23
        • 1970-01-01
        • 2011-03-16
        • 1970-01-01
        • 2011-08-08
        相关资源
        最近更新 更多