2010-12-06 16:36:13 +0000 2010-12-06 16:36:13 +0000
64
64

¿Cómo comprobar si existe un directorio en Windows?

Me gustaría traducir este script de Linux/Bash al shell de Windows:

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

Comprueba si existe un directorio y si no lo crea.

Respuestas (9)

79
79
79
2010-12-06 16:47:52 +0000
@echo off
IF exist myDirName ( echo myDirName exists ) ELSE ( mkdir myDirName && echo myDirName created)

Añadido por Barlop

Mientras que lo anterior funciona para esta situación particular, el título dice sobre la prueba específicamente para un directorio. El comentario de Phogg usando if exist mydirname @echo off IF exist myDirName ( echo myDirName exists ) ELSE ( mkdir myDirName && echo myDirName created) `

Añadido por Barlop

Mientras que lo anterior funciona para esta situación particular, el título dice sobre la prueba específicamente para un directorio. El comentario de Phogg usando en lugar de if exist mydirname es el camino. Algunas respuestas han usado ¹nulo pero ¹nulo es problemático en NT. Sin incluir una barra invertida, se probará para un archivo o un directorio. Así que, para un directorio, incluye la barra invertida.

21
21
21
2011-12-06 11:52:52 +0000

Esto es lo que acabo de descubrir:

Puedes 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)
11
11
11
2012-05-12 15:36:37 +0000

Usa una barra invertida, no una barra adelante: myDirName\nul no 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 es un directorio – bar es un archivo – xyz no existe

editar: esto solo funciona si el nombre del directorio no contiene espacios

5
5
5
2014-06-03 11:10:57 +0000

Algunos han sugerido hacer \ ~ - nul, pero eso no parece funcionar de manera fiable 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>
4
4
4
2013-10-11 11:29:44 +0000

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

IF EXISTEN filename\NUL

estaba devolviendo VERDADERO tanto para los archivos como para los directorios. Encontré una solución alternativa en www.robvanderwoude.com/battech_ifexistfolder.php y encontré una versión revisada del bucle FOR del 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 ) ) )
1
1
1
2014-06-03 09:50:53 +0000

Veo que muchos tienen problemas para diferenciar entre archivos y carpetas. ¿Alguien ha intentado simplemente grabar un CD después de comprobar que existe? Entonces el 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
)
0
0
0
2019-11-09 14:56:24 +0000

Prefiero usar dir /d | findstr \[\.\.\]:

2>nul dir /d "myDirName" | findstr \[\.\.\] >nul && echo= "ok" || mkDir myDirName&&echo= Is NOT dir

2>nul dir /d "myDirName" | findstr \[\.\.\] >nul && echo= "ok" || mkDir myDirName

Para crear si existe o no y para ignorar el error…

2>nul mkDir myDirName

También …

if exist "myDirName\." (echo/"ok") else mkdir myDirName

rem :: or direct create myDirName hidden/ignoring error
       2>nul mkdir myDirName & if exist "myDirName\." echo/ exist 
rem :: output: exist
0
0
0
2012-05-04 10:41:48 +0000
exist myDirName/nul

también es cierto si miNombreDeDir es un archivo, wh no es la funcionalidad de búsqueda

-1
-1
-1
2018-08-24 18:31:30 +0000

Encontrar una carpeta no debería ser tan difícil. Mi solución, usa perl:

for($cnt=$#ARGV; $cnt\>=0; --$cnt) { if ( -d "$ARGV[$cnt]" ) { print "argv[$cnt]=$ARGV[$cnt] is a folder\n"; $dir = $ARGV[$cnt]; break; } else { print "argv[$cnt]=$ARGV[$cnt] is Not a folder\n"; } }