wake-up-neo.com

Ordner mit Stapel erstellen, aber nur, wenn er noch nicht vorhanden ist

Kann mir jemand sagen, wie man das Folgende in einem Windows-Batch-Skript 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 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.

398
Bill

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.

558
The Answerer
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 )

201

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 .

51
Agent_9191
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.

36
3years2late
set myDIR=LOG
IF not exist %myDIR% (mkdir %myDIR%)
29
Robie

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
16
D3F4ULT

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"
15
user5628226

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\"
0
Winston