IF-Befehle in einer Batchdatei

1

Ich schreibe eine kleine Batchdatei, um die Themen und Diagramme der Benutzer in Office zu ersetzen. Ich habe die untenstehende Batch-Datei, die gut funktioniert.

cd c:\documents and settings\%username%\application data\microsoft\templates
echo Y | rmdir charts /s
mkdir charts
echo Y | del "c:\documents and settings\%username%\application data\microsoft\templates\document themes\*.*"

net use o: \\servername\sms
copy "o:\ppt themes\charts\*.*" "c:\documents and settings\%username%\application data\microsoft\templates\charts"
copy "o:\ppt themes\Document Themes\*.*" "c:\documents and settings\%username%\application data\microsoft\templates\document themes"

c:
net use o: /delete

Jetzt möchte ich, dass das obige nur dann ausgeführt wird, wenn es noch nicht zuvor ausgeführt wurde. Wir werden dies etwa zwei Wochen lang allen Benutzern vorschieben, um Leute zu erwischen, die nicht jeden Tag im Spiel sind.

Gibt es eine Möglichkeit, den Befehl damit zu beginnen, nach einem der bereits heruntergedrückten neuen Themen / Diagramme zu suchen, und wenn es vorhanden ist, dann nicht ausführen?

Jede Hilfe zu diesem Thema wäre sehr dankbar, da ich diese Batch-Dateien noch ziemlich neu finde.

Rossaluss
quelle
2
Einige nicht zusammenhängende Kommentare: 1) rmdir /s/q somedirectory - keine nicht benötigten Aufforderungen; 2) du kannst copy direkt aus \\servername\share\path\file, so net use ist nicht notwendig.
grawity
Es ist auch möglich, die /q Flagge mit der del Befehl auch.
afrazier
@afrazier: Ja, aber del Die leeren Unterverzeichnisse werden zurückgelassen.
grawity
Ah, ich habe versucht, direkt aus der Serverfreigabe zu kopieren, und es gab einen Fehler, wenn ich sie mit Pause sah. Ich kann mich nicht erinnern, was der Fehler war. Ich werde es noch einmal versuchen, um es aufzuräumen. Danke =)
Rossaluss
@grawity: Ich weiß, aber die Frage hat eine echo Y | del C:\Path\* Aussage, also dachte ich, der Fragesteller könnte diesen Leckerbissen nützlich finden.
afrazier

Antworten:

2

Wenn Pfad \ zu \ einige \ Datei \ vorhanden ist, enden Sie hier

.... den Rest deines Skripts hier ....   ....   ....

:Ende

Beachten Sie den Doppelpunkt vor dem Label (in diesem Fall 'Ende') - es ist wichtig. Das eigentliche Etikettenwort "Ende" ist keine Zauberei. Jedes Wort (an beiden Stellen verwendet) würde ausreichen.

JRobert
quelle
1
Im cmd.exe Sie können verwenden goto :eof Stattdessen braucht es kein Etikett.
grawity
Dieser Ansatz setzt einige eindeutige "Versions" -Dateien voraus, die Sie ebenfalls herausschieben würden. (Vor und nach dem Ausführen des Skripts sind Dateien in \ charts und \ document-Themes vorhanden.)
RJFalconer
Danke JRobert, ich gebe das mal, wenn ich am Montag wieder da bin.
Rossaluss
RJFalconer: Natürlich würde jede alte Datei nicht funktionieren; Das Vorhandensein der getesteten Datei muss eindeutig anzeigen, dass die Aktualisierung stattgefunden hat.
JRobert
Die Dateien, die heruntergedrückt werden, haben eindeutige Namen, die vor dem Push nicht vorhanden sind. Dies sollte also kein Problem sein.
Rossaluss