2016-06-09 5 views
2

Immer, wenn xcopy keine Datei findet, wird die errorLevel Variable von 0 in etwas anderes geändert. In unserer Firma haben wir große Skripte, die Dateien mit xcopy kopieren und Aktionen basierend auf dieser errorLevel durchführen.xcopy - kopiert mindestens eine Datei, die mit einem Muster übereinstimmt

Es funktioniert absolut gut für bestimmte Dateien oder Verzeichnisse.

Works absolut in Ordnung:

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

Wenn aber statt den genauen Namen einer Datei angeben möchte ich eine * verwenden, dann errorLevel würde nicht mehr funktionieren zu überprüfen.

funktioniert nicht:

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

Ich hol:

Datei nicht gefunden - Datei *

0 Datei (en) kopiert

Aber errorLevel wäre 0.

Wie kann ich sicherstellen, dass mindestens 1 Datei kopiert wird, wenn der Platzhalter verwendet?

Antwort

2

Der Befehl xcopy verwendet bei Verwendung von Platzhaltern keine übereinstimmenden Dateien als Fehler.

Als Behelfslösung können Sie den where Befehls zu überprüfen, ob es mindestens einen passenden Artikel ist, in welchem ​​Fall sie die ErrorLevel-0 setzt, sondern auf 1 anders. Hinzufügen des Schalters /Q verhindert where von allem, was die Ausgabe und lässt sie nur die ErrorLevel zurück:

where /Q "file*" 
if %errorlevel% neq 0 exit -1 
xcopy "file*" "dir" 
if %errorlevel% neq 0 exit -1 

Sie können eine einzelne Prüfung von ErrorLevel tun, weil xcopy die ErrorLevel von where überschrieben. Sie können jedoch die oben wie folgt verkürzen:

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

Oder auch so:

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

ich alle Datei- und Verzeichnisangaben in Anführungszeichen hier gesetzt haben, denn dies ist das ist Nur sicherer Weg, falls einer von ihnen Leerzeichen enthält.