每当xcopy
找不到文件时,它就会将errorLevel
变量从0
更改为其他值。
在我们公司,我们有大型脚本,使用 xcopy
复制文件并根据此 errorLevel
采取操作。
对于特定文件或目录来说它工作得非常好。
工作得很好:
xcopy file dir
if %errorlevel% neq 0 exit -1
但是,如果我不想使用 *
而不是指定文件的确切名称,则检查 errorLevel
将不再有效。
不起作用:
xcopy file* dir
if %errorlevel% neq 0 exit -1
我会得到:
File not found - file*
0 File(s) copied
但是errorLevel
将为0
。
如何确保使用通配符时至少复制 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
将覆盖 where
的 ErrorLevel
。但是,您可以像这样缩短上面的内容:
where /Q "file*" || exit -1
xcopy "file*" "dir" || exit -1
或者甚至像这样:
where /Q "file*" && xcopy "file*" "dir" || exit -1
我已将所有文件和目录规范放在引号之间,因为这是唯一安全的方法,以防它们中的任何一个包含空格。
关于windows - xcopy - 复制至少一个与模式匹配的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37724931/