2016-06-09 36 views
2

只要xcopy找不到文件,就會將errorLevel變量從0更改爲其他內容。 在我們公司,我們有大型腳本,使用xcopy來複制文件,並根據此errorLevel採取行動。xcopy - 複製至少一個匹配模式的文件

它對於特定文件或目錄絕對正常。

作品精絕:然而,如果不是指定文件的確切名稱

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

我想用一個*,然後檢查errorLevel將不再工作。

不起作用:

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

我會得到:

未找到文件 - 文件*

0文件(縣)複製

errorLevel將是0

如何確保在使用通配符時至少複製1個文件?

回答

2

當使用通配符時,xcopy命令不會將零匹配文件視爲錯誤。

作爲一種變通方法,您可以使用where命令來檢查是否存在至少一個匹配的物品,在這種情況下,它設置ErrorLevel0,但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 

我已經把所有的文件和目錄規範引號這裏,因爲這是隻有安全的方式,以防其中任何一個包含空格。