xcopy – 复制至less一个匹配模式的文件

只要xcopy找不到文件,就会将errorLevelvariables从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会覆盖ErrorLevelwhere 。 不过,你可以像这样缩短上面的内容:

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

甚至像这样:

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

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