每当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个文件?
答案 0 :(得分:2)
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
会覆盖ErrorLevel
的{{1}}。但是,您可以像这样缩短上述内容:
where
或者甚至喜欢这样:
where /Q "file*" || exit -1
xcopy "file*" "dir" || exit -1
我已将所有文件和目录规范放在引号之间,因为这是唯一安全的方式,以防它们中的任何一个包含空格。