Comprobando si existe una carpeta usando un archivo .bat [cerrado]

160

Me gustaría poder verificar si existe una determinada carpeta (Carpeta A) y, de ser así, que se muestre un mensaje y luego se salga el archivo por lotes.

Si la carpeta A no existe, me gustaría comprobar si existe otra carpeta (carpeta B). Si FolderB no existe, se debe mostrar un mensaje y se debe crear la carpeta, y si FolderB existe, se debe mostrar un mensaje que lo diga.

¿Alguien tiene alguna idea sobre el código que podría usar simplemente en el bloc de notas para crear un archivo por lotes que me permita hacer esto?

Todo esto debe hacerse en un solo .batarchivo.

usuario3179825
fuente
77
Una búsqueda en Google presenta Pruebas si existe una unidad o directorio . Y esto explica exactamente cómo hacer lo que está pidiendo ...
NealB
2
Aquí se encontró una búsqueda de "directorio de archivos por lotes" en SO. Archivo por lotes de Windows Busque el directorio, si no existe, cree y mueva el archivo , que le muestra cómo ver si un directorio existe o no. Aquí también hay publicaciones sobre cómo crear un directorio a partir de un archivo por lotes. Haga una investigación básica antes de publicar nuevas preguntas; Lo más probable es que la pregunta se haya hecho aquí anteriormente. Gracias.
Ken White
3
El lote de Windows es un lenguaje de programación, verifique si el archivo existe es una tarea de programación. Aparece en el tema.
Audrius Meskauskas
1
¿Debe cerrarse como duplicado de Cómo probar si un archivo es un directorio en un script por lotes? en lugar de "fuera de tema"
Michael Freidgeim

Respuestas:

259

Intenta usar esto:

IF EXIST yourfilename (
echo Yes 
) ELSE (
echo No
)

Reemplazar yourfilename con el nombre de su archivo.

Para ver un directorio, vea este https://jeffpar.github.io/kbarchive/kb/065/Q65994/

C:
IF NOT EXIST C:\WIN\ GOTO NOWINDIR
CD \WIN
:NOWINDIR

la barra diagonal inversa ('\') parece ser suficiente para distinguir entre directorios y archivos ordinarios.

09stephenb
fuente
2
La segunda parte de tu respuesta está incompleta.
tmj
44
if exist "c:\folder\nul" echo okno funcionó para mí en Windows 7. Lo que funcionó fue if exist "c:\folder\" echo ok.
Alexander Gelbukh
2
@AlexanderGelbukh: tiene razón, if exist "networkPath\nul"puede informar falsamente un archivo como una carpeta en unidades de red de Windows. Lamentablemente, el if exist "networkPath\"sufre el mismo problema. Consulte la actualización 2015-12-08 en stackoverflow.com/a/8669636/1012053 para obtener una técnica que ha sido confiable en todas mis pruebas.
dbenham
@AlexanderGelbukh Funciona sin las comillas. Por supuesto, esto te limita cuando se trata de tener espacios en la ruta del directorio.
Marc.2377
1
Sí, sin comillas funciona. Sin embargo, con comillas no funciona incluso para unidades locales: if exist c:\Windows\nul echo okdice ok, pero if exist "c:\Windows\nul" echo okno dice nada. Como he dicho, mientras if exist "c:\Program Files\nul" echo okno dice nada, if exist "c:\Program Files\" echo okdice oky por lo tanto funciona incluso para el camino con espacios.
Alexander Gelbukh
34

Creo que la respuesta está aquí (posiblemente duplicada):

¿Cómo probar si un archivo es un directorio en un script por lotes?

IF EXIST %VAR%\NUL ECHO It's a directory

Reemplace% VAR% con su directorio. Lea la respuesta original porque incluye detalles sobre el manejo de espacios en blanco en el nombre de la carpeta.

Como dijo foxidrive, esto podría no ser confiable en las ventanas de clase NT. A mí me funciona, pero sé que tiene algunas limitaciones (que puedes encontrar en la pregunta de referencia)

if exist "c:\folder\" echo folder exists 

debería ser suficiente para las ventanas modernas.

Cosmin Vană
fuente
66
La técnica \ nul no es confiable en las ventanas de clase NT. Sin embargo, estaba bien en MSDOS y Win9x. La solución en Windows moderno es simplemente if exist "c\:folder\" echo folder exists
foxidrive
1
Creo que esto también se especifica en el enlace al que se hace referencia.
Cosmin Vană
Todavía no entiendo por qué me votaron negativamente (lo que significa "No útil"). Agregué la referencia a la pregunta donde las respuestas cubren el escenario requerido.
Cosmin Vană
No útil podría ser porque no es aplicable a las máquinas actuales, y su respuesta anterior no hizo ninguna distinción. Algunas personas todavía rechazarán su respuesta porque no responde la pregunta como se plantea.
foxidrive
2
de support.microsoft.com/kb/65994 "NUL siempre existe en una unidad local de MS-DOS FAT" - como enE:\NUL
CAD bloke