【问题标题】:xcopy - copy at least one file matching a patternxcopy - 复制至少一个匹配模式的文件
【发布时间】:2016-06-09 11:38:54
【问题描述】:

每当xcopy 找不到文件时,它会将errorLevel 变量从0 更改为其他值。 在我们公司,我们有大型脚本,它们使用xcopy 复制文件并根据errorLevel 采取行动。

对于特定的文件或目录,它绝对可以正常工作。

工作得很好:

xcopy file dir
if %errorlevel% neq 0 exit -1

但是,如果我想使用* 而不是指定文件的确切名称,那么检查errorLevel 将不再起作用。

不起作用:

xcopy file* dir
if %errorlevel% neq 0 exit -1

我会得到:

找不到文件 - 文件*

0 个文件已复制

errorLevel 将是0

如何确保在使用通配符时至少复制了 1 个文件?

【问题讨论】:

    标签: windows batch-file xcopy


    【解决方案1】:

    xcopy 命令在使用通配符时不会将零匹配文件视为错误。

    作为一种解决方法,您可以使用where 命令检查是否至少有一个匹配项,在这种情况下,它将ErrorLevel 设置为0,否则设置为1。添加开关/Q 可防止where 输出任何内容并让它只返回ErrorLevel

    where /Q "file*"
    if %errorlevel% neq 0 exit -1
    xcopy "file*" "dir"
    if %errorlevel% neq 0 exit -1
    

    您不能对ErrorLevel 进行一次检查,因为xcopy 将覆盖whereErrorLevel。但是,您可以像这样缩短上面的内容:

    where /Q "file*" || exit -1
    xcopy "file*" "dir" || exit -1
    

    甚至像这样:

    where /Q "file*" && xcopy "file*" "dir" || exit -1
    

    我已将所有文件和目录规范放在引号之间,因为这是唯一安全的方法,以防它们中的任何一个包含空格。

    【讨论】:

      猜你喜欢
      • 2022-11-24
      • 1970-01-01
      • 2013-05-29
      • 1970-01-01
      • 1970-01-01
      • 2017-10-01
      • 1970-01-01
      • 2019-11-09
      • 2018-11-07
      相关资源
      最近更新 更多