Compruebe si existe un archivo/carpeta, con la línea de comandos cmd (NO con un script por lotes)

Compruebe si existe un archivo/carpeta, con la línea de comandos cmd (NO con un script por lotes)

Estoy en la consola de Windows tratando de averiguar si un archivo/carpeta existe o no.

EXISTpodría usarse por lotes, pero no está disponible en la línea de comandos:

C:\Users\WIN7PR~1>EXIST C:\Users
'EXIST' is not recognized as an internal or external command, operable program or batch file.

Respuesta1

La solución cuando el recurso es un archivo es bastante sencilla, como lo indican otros:

C:\> IF EXIST C:\CONFIG.SYS ECHO C:\CONFIG.SYS exists.

Desafortunadamente, lo anterior no funciona para directorios. La función EXIST devuelve el mismo resultado para las carpetas presentes y faltantes. Afortunadamente, existe una oscura solución:

C:\> IF NOT EXIST C:\FOLDER\NUL ECHO C:\FOLDER missing.
C:\FOLDER missing.
C:\> MD C:\FOLDER
C:\> IF EXIST C:\FOLDER\NUL ECHO C:\FOLDER exists.
C:\FOLDER exists.

Resulta que para admitir construcciones como agregar >NULdeclaraciones de comando, hay una especie de archivo virtual llamado "NUL" en cada directorio. Comprobar su existencia equivale a comprobar la existencia del directorio.

Este comportamiento está documentado en un artículo de la base de conocimientos de Microsoft (https://support.microsoft.com/en-us/kb/65994) y he confirmado su comportamiento en FreeDOS 1.1 y en un shell de comandos de Windows 7.

EXTRA: El artículo de KB indica que esta técnica también se puede utilizar para ver si hay una unidad presente. Sin embargo, en el caso de comprobar la existencia de la unidad, existen advertencias:

  • Se produce un Abort, Retry, Fail?error si la unidad no está formateada.

  • El uso de esta técnica para comprobar la existencia de la unidad depende de la implementación del controlador del dispositivo y es posible que no siempre funcione.

Respuesta2

Puedes usar un simple

DIR C:\User

Respuesta3

Puede usar typeel comando, devolverá el contenido de un archivo de texto sin abrirlo y, para un directorio, devolverá: Acceso denegado.

Si el archivo o directorio no está disponible, recibirá el mensaje: El sistema no puede encontrar el archivo especificado.

Así por ejemplo:

C:\>type c:\temp
Access is denied.

C:\>type c:\example.txt
Some example content in a text file

C:\>type c:\doesnotexist
The system cannot find the file specified.

Respuesta4

Puedes usar este código:

<pre>
:init
SETLOCAL enabledelayedexpansion
GOTO make_dir

:make_dir
ECHO .
ECHO Checking if exists directory %out_path% ...
CD %out_path%
IF !ERRORLEVEL! GTR 0 (
   ECHO Directory doesn't exist, creating...
   MD %out_path%
   GOTO make_dir
) ELSE (
   ECHO Directory already exists.
)
:GOTO back_it_up

:back_it_up
::Procedure that makes an backup
GOTO done

:done
ECHO Finished
SETLOCAL
EXIT /B
</pre>

información relacionada