59 votos

Cómo comprobar si existe un directorio en Windows?

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

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

Comprueba si existe un directorio, y si no se lo crea.

73voto

Sathya Puntos 42713
@echo off
IF exist myDirName ( echo myDirName exists ) ELSE ( mkdir myDirName && echo myDirName created)

Añadido por Barlop

Mientras que el anterior funciona para esta situación en particular, el título dice acerca de las pruebas específicamente para un directorio. Phogg comentario de uso if exist mydirname\ en lugar de if exist mydirname es el camino. Algunas respuestas han utilizado \nul pero \nul es problemático en el NT. No incluye una barra diagonal inversa pondrá a prueba para un archivo o un directorio. Así, para un directorio, incluyen la barra diagonal inversa.

20voto

hyp Puntos 345

Aquí es lo que acabo de encontrar:

Usted puede comprobar si un fichero nulo existe; si existe el directorio que contiene el fichero nulo, si la nul el archivo no existe, no existe el directorio.

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

11voto

DVF Puntos 91

Utilice una barra diagonal inversa, no barra: 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

edit: esto sólo funciona si el nombre del directorio no contiene espacios

4voto

Damian Puntos 11

Me preguntaba por qué joe tenía un downvote como yo estaba experimentando el mismo tipo de problema en Windows 7, es decir, que

SI EXISTE nombre de archivo\NUL

estaba regresando CIERTO, tanto para archivos y directorios. He encontrado una solución alternativa a www.robvanderwoude.com/battech_ifexistfolder.php y vino para arriba con una versión revisada de DVF del bucle FOR:

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 ) ) )

1voto

Veo que muchos tienen problemas con la diferenciación entre los archivos y las carpetas. Alguien ha tratado simplemente de cd después de la comprobación de que existe? A continuación, el cd ya sea éxito o no.

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
)

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: