Kann mir jemand sagen, wie man in einem Windows-Batch-Skript Folgendes macht? ( *.bat
):
- Erstellen Sie einen Ordner nur, wenn er noch nicht vorhanden ist
Im Einzelnen möchte ich einen Ordner mit dem Namen VTS
auf dem C:\
Laufwerk erstellen , aber nur, wenn dieser Ordner noch nicht vorhanden ist. Ich möchte den Inhalt des Ordners nicht überschreiben, wenn er bereits vorhanden ist und der Stapel ausgeführt wird.
windows
batch-file
cmd
Rechnung
quelle
quelle
if not exist "%Folder%" mkdir "%New-Folder%"
Antworten:
Sie verwenden nur
if not exist "C:\VTS\" mkdir C:\VTS
Folgendes : Es wird nur dann ein Verzeichnis erstellt, wenn der Ordner nicht vorhanden ist.Beachten Sie, dass dieser Existenztest nur dann true zurückgibt, wenn VTS vorhanden ist und ein Verzeichnis ist. Wenn es nicht vorhanden ist oder als Datei vorhanden ist, wird der Befehl mkdir ausgeführt und sollte einen Fehler verursachen. Möglicherweise möchten Sie überprüfen, ob VTS auch als Datei vorhanden ist.
quelle
NUL
ist.if exist "a" if not exist "a\" (echo "it's a file") else (echo "it's a dir")
. In Bezug auf Ihren letzten Satz vermute ich, dass an anderer Stelle etwas mit Ihrer Batch-Datei nicht stimmt.Siehe auch https://support.microsoft.com/en-us/kb/65994
(Update 7. März 2018; Microsoft-Artikel ist nicht verfügbar, Archiv unter https://web.archive.org/web/20150609092521/https://support.microsoft.com/en-us/kb/65994 )
quelle
NUL
ist mit einem L.Rufen Sie einfach an,
mkdir C:\VTS
egal was passiert. Es wird einfach gemeldet, dass das Unterverzeichnis bereits vorhanden ist.Bearbeiten: Wie andere angemerkt haben, wird dadurch% ERRORLEVEL% festgelegt, wenn der Ordner bereits vorhanden ist. Wenn sich Ihr Batch (oder ein Prozess, der ihn aufruft) nicht um die Fehlerstufe kümmert, funktioniert diese Methode einwandfrei. Da in der Frage nicht erwähnt wurde, dass die Fehlerstufe vermieden werden soll, ist diese Antwort vollkommen gültig. Es erfüllt die Anforderungen zum Erstellen des Ordners, wenn er nicht vorhanden ist, und überschreibt nicht den Inhalt eines vorhandenen Ordners. Ansonsten folge Martin Schapendonks Antwort .
quelle
Erstellen Sie einen Ordner namens
VTS
und AusgangA subdirectory or file TEST already exists
zuNUL
.oder
Ändern Sie den Laufwerksbuchstaben
C:
, dermkdir
Ausgang FehlerNUL
und den nächsten Befehl auszuführen.quelle
NUL
Ausgabedatei zu unterstützen .quelle
log
. Es ist ein subtiler Unterschied, aber es wird zu schwer zu findenden Fehlern in Ihren Skripten führen.Auf diese Weise sollten Sie am Ende des Verzeichnisnamens einen Backslash setzen , um zu vermeiden, dass dieser Ort in einer Datei ohne Erweiterung mit demselben Namen wie das von Ihnen angegebene Verzeichnis vorhanden ist. Verwenden Sie niemals "C: \ VTS", da dies eine Datei sein kann Wenn der Name "VTS" in der Partition "C: " gespeichert ist, verwenden Sie "C: \ VTS \" . Überprüfen Sie den Backslash nach dem VTS . Dies ist der richtige Weg.
quelle
!errorlevel!
verzögerte Erweiterung verwenden. AndernfallsERRORLEVEL
würde die Variable vor der Eingabe der erstenif
(dh zur Analysezeit) analysiert. Jetzt wird es zur Ausführungszeit analysiert, damit das Ergebnis von erfasst werden kannmkdir
. Sie haben auch Recht, auch wenn Sie auf Existenz testen, sollten Sie dennoch auf Erfolg testen (denken Sie zum Beispiel: Zugriff verweigert Fehler). Sehr gute Lösung im Vergleich zu den anderen, +10 !!!Sie können verwenden:
Sie können den Code auch erweitern, um fehlende erwartete Dateien zu ersetzen.
quelle
Ich habe dies für mein Skript erstellt, das ich in meiner Arbeit für eyebeam verwende.
quelle