it-swarm.com.de

Wie überprüfe ich, ob ein Verzeichnis in Windows existiert?

Ich möchte dieses Linux/Bash-Skript in die Windows-Shell übersetzen:

if test -d myDirName; then echo "ok"; else mkdir myDirName; fi

Es wird geprüft, ob ein Verzeichnis vorhanden ist, und wenn nicht, wird es erstellt.

57
Pietro
@echo off
IF exist myDirName ( echo myDirName exists ) ELSE ( mkdir myDirName && echo myDirName created)

Hinzugefügt von Barlop

Während das Obige für diese spezielle Situation funktioniert, besagt der Titel über das Testen speziell für ein Verzeichnis. Phoggs Kommentar, der if exist mydirname\ anstelle von if exist mydirname verwendet, ist der richtige Weg. Einige Antworten haben\nul verwendet, aber\nul ist unter NT problematisch. Ohne einen nachgestellten Backslash wird nach einer Datei oder einem Verzeichnis gesucht. Fügen Sie für ein Verzeichnis den nachgestellten Backslash ein.

65
Sathyajith Bhat

Folgendes habe ich gerade herausgefunden:

Sie können testen, ob eine NUL-Datei vorhanden ist. Wenn das Verzeichnis existiert, enthält es eine nul-Datei. Wenn die nul-Datei nicht existiert, existiert das Verzeichnis nicht.

IF exist myDirName/nul ( echo myDirName exists ) ELSE ( mkdir myDirName && echo myDirName created)
20
dev008

Verwenden Sie einen Backslash, keinen Forward-Slash: myDirName\nul not myDirName/nul

md foo 
echo.>bar 
for %I in (foo bar xyz) do @( 
  if exist %I ( 
    if exist %I\nul ( 
      echo -- %I is a directory 
    ) else ( 
      echo -- %I is a file 
    ) 
  ) else ( 
    echo -- %I does not exist 
  ) 
)

- foo ist ein Verzeichnis
- Bar ist eine Datei
- xyz existiert nicht

bearbeiten: Dies funktioniert nur, wenn der Verzeichnisname keine Leerzeichen enthält

11
DVF

Einige haben vorgeschlagen, dies zu tun, aber dies scheint unter NT nicht zuverlässig zu funktionieren

C:\blah>md abc

C:\blah>if exist abc\nul echo yes
yes

C:\blah>if exist "abc\nul" echo yes

C:\blah>

http://www.dostips.com/forum/viewtopic.php?f=3&t=4913

foxidrive writes-

The trick with nul worked in pre NT versions of windows.

Now you would use this, with a trailing backslash.

if exist "C:\abcde\" echo the folder exists

Zu der Frage

C:\blah>if exist "abcd\" (echo yes) else (echo no && mkdir abcd)
no

C:\blah>if exist "abcd\" (echo yes) else (echo no && mkdir abcd)
yes

C:\blah>
5
barlop

Ich fragte mich, warum Joe eine Ablehnung hatte, als ich unter Windows 7 das gleiche Problem hatte, nämlich das

WENN EXISTIEREN Dateiname\NUL

gab TRUE sowohl für Dateien als auch für Verzeichnisse zurück. Ich fand eine alternative Lösung unter www.robvanderwoude.com/battech_ifexistfolder.php und fand eine überarbeitete Version der FOR-Schleife von DVF:

FOR %I in (foo bar xyz) DO @( PUSHD %I && (POPD & echo -- %I is a directory) || ( IF exist %I ( echo -- %I is a file ) ELSE ( echo -- %I does not exist ) ) )
4
Damian

Ich sehe viele Probleme mit der Unterscheidung zwischen Dateien und Ordnern. Hat jemand versucht, einfach eine CD einzuspielen, nachdem er überprüft hat, ob sie existiert? Dann wird CD entweder erfolgreich sein oder scheitern.

set MyDir = "MyTestDir"
IF exist MyDir (
    cd MyDir 
    IF ERRORLEVEL NEQ 0 (
        echo "Error: %MyDir% already exists, but it is a file!"
        exit 1
    ) else (
        # Do not forget to cd back
        cd ..
    )
) else (
   # Did not exist yet, so create it.
   mkdir MyDir
)
1
exist myDirName/nul

dies gilt auch dann, wenn myDirName eine Datei ist, bei der es sich nicht um die gesuchte Funktionalität handelt

0
Joe