只要xcopy
找不到文件,就会将errorLevel
variables从0
更改为其他值。 在我们公司,我们有大型脚本,使用xcopy
复制文件,并根据这个errorLevel
采取行动。
它对于特定的文件或目录来说绝对正常。
工作绝对好:
xcopy file dir if %errorlevel% neq 0 exit -1
但是,如果不是指定我想要使用*
的文件的确切名称,那么检查errorLevel
将不再起作用。
不起作用:
xcopy file* dir if %errorlevel% neq 0 exit -1
我去拿:
文件未find – 文件*
0复制文件
但是errorLevel
将是0
。
如何确保在使用通配符时至less有一个文件被复制?
当使用通配符时, xcopy
命令不会将零匹配文件视为错误。
作为解决方法,您可以使用where
命令来检查是否至少有一个匹配的项目,在这种情况下,它将ErrorLevel
设置为0
,否则设置为1
。 添加开关/Q
防止从输出任何地方,让它只是返回ErrorLevel
:
where /Q "file*" if %errorlevel% neq 0 exit -1 xcopy "file*" "dir" if %errorlevel% neq 0 exit -1
你不能单独检查ErrorLevel
,因为xcopy
会覆盖ErrorLevel
的where
。 不过,你可以像这样缩短上面的内容:
where /Q "file*" || exit -1 xcopy "file*" "dir" || exit -1
甚至像这样:
where /Q "file*" && xcopy "file*" "dir" || exit -1
我已经将所有文件和目录规范放在引号之间,因为这是唯一的安全方式,以防其中任何一个包含空格。