Risposte:
@echo off
IF exist myDirName ( echo myDirName exists ) ELSE ( mkdir myDirName && echo myDirName created)
Aggiunto da Barlop
Mentre quanto sopra funziona per questa particolare situazione, il titolo dice del test specifico per una directory. Il commento di Phogg usando if exist mydirname\
piuttosto che if exist mydirname
è il modo. Alcune risposte hanno usato \ nul ma \ nul è problematico in NT. Non includere una barra rovesciata finale per verificare un file o una directory. Quindi, per una directory, includere la barra rovesciata finale.
if exist mydirname\
e il resto come dici tu. In alternativa, potresti effettivamente ottenere un file test
binario e utilizzarlo su Windows.
mkdir
.
if not 1==1 echo hmm
o se esiste myDirName \ ELSE blahblahblah
Ecco cosa ho appena scoperto:
È possibile verificare se esiste un file nul; se la directory esiste, conterrà un file nul, se il file nul non esiste, la directory non esiste.
IF exist myDirName/nul ( echo myDirName exists ) ELSE ( mkdir myDirName && echo myDirName created)
if exist dirname
che sembra essere specifico di Windows NT.
\nul
, non è più necessario in Windows NT, plain if exist "C:\Program Files (x86)"
dovrebbe funzionare (a meno che non si stia ancora
Usa una barra rovesciata, non una barra rovesciata: myDirName\nul
nomyDirName/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 è una directory
- la barra è un file
- xyz non esiste
modifica: funziona solo se il nome della directory non contiene spazi
Alcuni hanno suggerito di fare \ nul, ma questo non sembra funzionare in modo affidabile in NT
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
Per quanto riguarda la domanda
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>
Mi chiedevo perché Joe avesse un downvote dato che stavo vivendo lo stesso tipo di problema su Windows 7, vale a dire quello
IF EXIST nomefile \ NUL
stava restituendo VERO sia per i file che per le directory. Ho trovato una soluzione alternativa su www.robvanderwoude.com/battech_ifexistfolder.php e ho trovato una versione rivista del ciclo FOR di 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 ) ) )
Vedo che molti hanno problemi con la differenziazione tra file e cartelle. Qualcuno ha provato a inserirlo semplicemente dopo aver verificato che esiste? Quindi il cd avrà esito positivo o negativo.
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
dopo la prima riga dovrebbero essere %MyDir%
. (2) Il cd ..
non farà quello che vuoi se %MyDir%
è un nome di percorso multi-livello (ad es. Pictures\cats
) O anche un nome di percorso assoluto (ad es \Windows
.). Valuta di usare pushd
/ popd
e / o setlocal
.
exist myDirName/nul
è vero anche se myDirName è un file, perché non è la funzionalità cercata
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>
non sono un fan di \ nul in NT ma non lo è. Avresti dovuto dare un risultato.
Trovare una cartella non dovrebbe essere così difficile. La mia soluzione, usa perl:
per ($ cnt = $ # ARGV; $ cnt> = 0; - $ cnt) { if (-d "$ ARGV [$ cnt]") { print "argv [$ cnt] = $ ARGV [$ cnt] è una cartella \ n"; $ dir = $ ARGV [$ cnt]; rompere; } altro { print "argv [$ cnt] = $ ARGV [$ cnt] non è una cartella \ n"; } }
mkdir -p myDirName
. Dopo aver trascorso giorni a cercare di tradurre bash-script relativamente semplici in batch-sh * t (assegnando il risultato di una funzione a una variabile?), Ho deciso di far installare cygwin alle persone.