Respuestas:
@echo off
IF exist myDirName ( echo myDirName exists ) ELSE ( mkdir myDirName && echo myDirName created)
Añadido por Barlop
Si bien lo anterior funciona para esta situación particular, el título dice acerca de las pruebas específicas para un directorio. El comentario de Phogg usando en if exist mydirname\
lugar de if exist mydirname
es el camino. Algunas respuestas han usado \ nul pero \ nul es problemático en NT. Si no se incluye una barra diagonal inversa posterior, se probará un archivo o un directorio. Entonces, para un directorio, incluya la barra invertida final.
if exist mydirname\
y el resto como dices. Alternativamente, podría obtener un test
binario y usarlo en Windows.
mkdir
hacerlo.
if not 1==1 echo hmm
o si existe myDirName \ ELSE blahblahblah
Esto es lo que acabo de descubrir:
Puede probar si existe un archivo nul; si el directorio existe, contendrá un archivo nul, si el archivo nul no existe, entonces el directorio no existe.
IF exist myDirName/nul ( echo myDirName exists ) ELSE ( mkdir myDirName && echo myDirName created)
if exist dirname
que parece ser específico de Windows NT.
\nul
, ya no es necesario en Windows NT, simplemente if exist "C:\Program Files (x86)"
debería funcionar (a menos que todavía esté apuntando a Windows 98 ...)
Utilice una barra diagonal inversa, no barra diagonal: 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 es un directorio
- la barra es un archivo
- xyz no existe
editar: esto solo funciona si el nombre del directorio no contiene espacios
Algunos han sugerido hacer \ nul, pero eso no parece funcionar de manera confiable en 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
Re la pregunta
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>
Me preguntaba por qué Joe tenía un voto negativo ya que estaba experimentando el mismo tipo de problema en Windows 7, a saber, que
SI EXISTEN nombre de archivo \ NUL
estaba devolviendo VERDADERO para ambos archivos y directorios. Encontré una solución alternativa en www.robvanderwoude.com/battech_ifexistfolder.php y se me ocurrió una versión revisada del bucle FOR de 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 ) ) )
Veo que muchos tienen problemas para diferenciar entre archivos y carpetas. ¿Alguien ha intentado simplemente cd en él después de comprobar que existe? Entonces cd tendrá éxito o fallará.
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
posteriores a la primera línea deben ser %MyDir%
. (2) cd ..
No hará lo que quiera si %MyDir%
es un nombre de ruta de varios niveles (por ejemplo, Pictures\cats
) o incluso un nombre de ruta absoluto (por ejemplo, \Windows
). Considere usar pushd
/ popd
y / o setlocal
.
exist myDirName/nul
también es cierto si myDirName es un archivo, whis no es la funcionalidad buscada
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>
No soy fanático de \ nul en NT pero no lo es. Deberías haber dado alguna salida.
Encontrar una carpeta no debería ser tan difícil. Mi solución, usa perl:
para ($ cnt = $ # ARGV; $ cnt> = 0; - $ cnt) { if (-d "$ ARGV [$ cnt]") { print "argv [$ cnt] = $ ARGV [$ cnt] es una carpeta \ n"; $ dir = $ ARGV [$ cnt]; rotura; } más { print "argv [$ cnt] = $ ARGV [$ cnt] no es una carpeta \ n"; } }
mkdir -p myDirName
. Después de pasar días tratando de traducir bash-scripts relativamente simples a batch-sh * t (¿asignar el resultado de una función a una variable?), He decidido hacer que la gente instale cygwin.