Kann mir jemand sagen, wie man das Folgende in einem Windows-Batch-Skript macht? (*.bat
):
Im Einzelnen möchte ich einen Ordner mit dem Namen VTS
auf dem Laufwerk C:\
erstellen, allerdings 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.
Verwenden Sie einfach Folgendes: if not exist "C:\VTS\" mkdir C:\VTS
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 und ein Verzeichnis ist. Wenn es nicht vorhanden ist oder als Datei vorliegt, 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.
if exist C:\VTS\NUL echo "Folder already exists"
if not exist C:\VTS\NUL echo "Folder does not exist"
Siehe auch https://support.Microsoft.com/en-us/kb/65994
(Update 7. März 2018; Microsoft-Artikel ist inaktiv, Archiv am https://web.archive.org/web/20150609092521/https://support.Microsoft.com/en-us/kb/65994 )
Rufen Sie einfach mkdir C:\VTS
an, egal was passiert. Es wird lediglich gemeldet, dass das Unterverzeichnis bereits vorhanden ist.
Bearbeiten: Wie andere angemerkt haben, wird% ERRORLEVEL% gesetzt, wenn der Ordner bereits vorhanden ist. Wenn sich Ihr Stapel (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 durchaus 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 folgt Martin Schapendonks Antwort .
mkdir C:\VTS 2> NUL
erstellen Sie einen Ordner mit dem Namen VTS
und geben Sie A subdirectory or file TEST already exists
an NUL
aus.
oder
(C:&(mkdir "C:\VTS" 2> NUL))&
ändern Sie den Laufwerksbuchstaben in C:
, mkdir
, geben Sie einen Fehler in NUL
aus und führen Sie den nächsten Befehl aus.
set myDIR=LOG
IF not exist %myDIR% (mkdir %myDIR%)
Ich benutze diesen Weg, Sie sollten setzen Sie einen Backslash am Ende des Verzeichnisnamens um zu vermeiden, dass dieser Ort in einer Datei ohne Erweiterung mit demselben Namen wie das von Ihnen angegebene Verzeichnis existiert, verwenden Sie niemals "C:\VTS" Da es eine Datei mit dem Namen "VTS" geben kann, die in der "C:" Partition gespeichert ist, ist die korrekte Verwendung - "C:\VTS \", überprüfen Sie den Backslash nach dem VTS, so ist der richtige Weg.
@echo off
@break off
@title Create folder with batch but only if it doesn't already exist - D3F4ULT
@color 0a
@cls
setlocal EnableDelayedExpansion
if not exist "C:\VTS\" (
mkdir "C:\VTS\"
if "!errorlevel!" EQU "0" (
echo Folder created successfully
) else (
echo Error while creating folder
)
) else (
echo Folder already exists
)
pause
exit
Sie können verwenden:
if not exist "C:\VTS\" mkdir "C:\VTS"
Sie können den Code auch erweitern, um fehlende erwartete Dateien zu ersetzen.
if not exist "C:\VTS\important.file" echo. > "C:\VTS\important.file"
ich habe dies für mein Skript erstellt, das ich in meiner Arbeit für Eyebeam verwende.
:CREATES A CHECK VARIABLE
set lookup=0
:CHECKS IF THE FOLDER ALREADY EXIST"
IF EXIST "%UserProfile%\AppData\Local\CounterPath\RegNow Enhanced\default_user\" (set lookup=1)
:IF CHECK is still 0 which means does not exist. It creates the folder
IF %lookup%==0 START "" mkdir "%UserProfile%\AppData\Local\CounterPath\RegNow Enhanced\default_user\"