Antworten:
@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 verwendet if exist mydirname\
eher als if exist mydirname
den Weg. Einige Antworten haben \ nul verwendet, aber \ nul ist unter NT problematisch. Ohne einen abschließenden Backslash wird nach einer Datei oder einem Verzeichnis gesucht. Fügen Sie für ein Verzeichnis den nachgestellten Backslash ein.
if exist mydirname\
und der Rest, wie Sie sagen. Alternativ können Sie auch eine test
Binärdatei abrufen und diese unter Windows verwenden.
mkdir
.
if not 1==1 echo hmm
existiert oder wenn myDirName \ ELSE existiert blahblahblah
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)
if exist dirname
die für Windows NT spezifisch zu sein scheinen.
\nul
Windows NT ist dies nicht mehr erforderlich. if exist "C:\Program Files (x86)"
Nur sollte es funktionieren (es sei denn, Sie haben noch Windows 98 im Visier ...)
Verwenden Sie einen Backslash, keinen Forward-Slash: myDirName\nul
nichtmyDirName/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
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>
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 habe unter www.robvanderwoude.com/battech_ifexistfolder.php eine alternative Lösung gefunden und mir eine überarbeitete Version der FOR-Schleife von DVF ausgedacht :
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 ) ) )
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
)
MyDir
nach der ersten Zeile sollten sein %MyDir%
. (2) Sie cd ..
werden nicht tun, was Sie wollen, wenn %MyDir%
es sich um einen mehrstufigen Pfadnamen (z. B. Pictures\cats
) oder sogar einen absoluten Pfadnamen (z \Windows
. B. ) handelt. Erwägen Sie die Verwendung von pushd
/ popd
und / oder setlocal
.
exist myDirName/nul
Dies gilt auch dann, wenn myDirName eine Datei ist, bei der es sich nicht um die gesuchte Funktionalität handelt
C:\blah>touch abe<ENTER>C:\blah>if exist abe\nul echo err<ENTER> C:\blah>if exist abe/nul echo err<ENTER>C:\blah>
Ich bin kein Fan von \ nUl in NT, aber es ist nicht. Du hättest etwas ausgeben sollen.
Einen Ordner zu finden sollte nicht so schwierig sein. Meine Lösung, benutze Perl:
für ($ cnt = $ # ARGV; $ cnt> = 0; - $ cnt) { if (-d "$ ARGV [$ cnt]") { print "argv [$ cnt] = $ ARGV [$ cnt] ist ein Ordner \ n"; $ dir = $ ARGV [$ cnt]; brechen; } else { print "argv [$ cnt] = $ ARGV [$ cnt] ist kein Ordner \ n"; } }
mkdir -p myDirName
. Nachdem ich tagelang versucht hatte, relativ einfache Bash-Skripte in Batch-Sh * T zu übersetzen (das Ergebnis einer Funktion einer Variablen zuzuweisen?), Habe ich mich dazu entschlossen, nur Leute dazu zu bringen, Cygwin zu installieren.