[batch] Probar la existencia de un directorio (a

Resuelto
mazkime Mensajes publicados 18 Estado Miembro -  
 ChemicalMouse -
Hola a todos.
Estoy escribiendo un script por lotes en el que necesito comprobar la existencia de un directorio. Para eso, uso el comando "if exist %1\nul", donde %1 es un argumento llamado con mi script (de hecho, ejecuto mi script en modo gráfico haciendo clic en el directorio en mi escritorio, gracias a la opción "abrir con" en la que he colocado mi script). %1 contiene, por lo tanto, la ruta del directorio seleccionado.

He realizado algunas pruebas: todo va muy bien cuando no hay espacios en la ruta de mi directorio, pero si hay un espacio (lo que ocurre todo el tiempo para un directorio que se encuentra en mi escritorio, ya que hay 'Documentos y Configuración' en la ruta...) el valor devuelto por la prueba siempre es falso.

Esto se debe, sin duda, a que en este caso la ruta de mi directorio está entre comillas "C:\Documentos y Configuración\etc ..."
He intentado quitar las comillas, moverlas justo alrededor de "Documentos y Configuración" pero nada de eso funciona, sigue sin funcionar.

¿Alguien tendría una solución para mí?
Gracias
Configuración: Windows XP Firefox 2.0.0.7

15 respuestas

Pigeo
 
No, la adición de \ o de \. no soluciona el problema.
Por favor, antes de publicar tonterías, les recuerdo que hay 4 cosas que verificar para responder correctamente a la pregunta original:
1) si el directorio existe, debe decir "SÍ" (ya sea que esté vacío o contenga archivos, no importa)
2) si ya existe un archivo con este nombre, debe decir "NO" (porque es un archivo y no un directorio. ¡Y en un directorio no se puede tener un archivo y un directorio con el mismo nombre!)
3) si no hay ni archivo ni directorio con ese nombre, también debe decir "NO".
4) La solución propuesta debe ser compatible con nombres que contengan espacios.

Antes de publicar cualquier cosa, gracias por tomarse el tiempo para probar que sus propuestas cumplen con estos cuatro criterios.

Entre todas las soluciones que se han propuesto hasta ahora (y salvo error de mi parte), NINGUNA satisface estos 4 criterios al mismo tiempo.

Ahora, les propongo una que parece funcionar correctamente:

IF exist "mi nombre de directorio\*.*" echo SÍ

IF NOT exist "mi nombre de directorio\*.*" echo NO

Acabo de verificar: si no me he equivocado, esta solución satisface los 4 criterios mencionados anteriormente. Las comillas están ahí para manejar los nombres que contienen espacios, y el comodín *.* permite distinguir los archivos (respuesta NO) de los directorios (respuesta SÍ). Pequeño detalle que es importante: aunque el directorio esté vacío, el comodín *.* sigue devolviendo SÍ porque siempre hay dos archivos presentes, incluso en los directorios "vacíos": se trata de . y de ..

Eso es todo, ¡feliz programación! :-)
23
ChemicalMouse
 
¡nítido!!!!
0
jb36123
 
Hola

Teniendo el mismo problema, también me he podido romper la cabeza...
La solución de MS no me satisfacía, sobre todo en el caso en que no tenemos derechos de escritura...

He encontrado la siguiente solución
el comando "dir" define la variable ERRORLEVEL a 0 cuando el directorio existe y a 1 cuando no existe...
13
mazkime Mensajes publicados 18 Estado Miembro 11
 
Finalmente encontré la solución a mi problema, gracias a... ¡microsoft!
Buscando desesperadamente en la red, encontré la siguiente página: https://support.microsoft.com/fr-fr/help/463550

Ellos proceden de una manera diferente a la mía: intentan copiar un archivo en el directorio que queremos probar, y luego verifican la existencia del archivo. Me parece menos elegante, pero al menos ¡funciona!

¡Hasta luego!
7
karirovax Mensajes publicados 3584 Estado Miembro 215
 
hola

en lugar de probar la existencia de un directorio, prueba la existencia de un archivo en ese directorio.

;)
0
Drallieiv
 
si existe "C:\TEST TOTO\nul" echo Es un directorio

ya es mejor
3
dubcek Mensajes publicados 18627 Fecha de registro   Estado Colaborador Última intervención   5 659
 
y así
@echo off

set rep="test con espacio"
if exist %rep% echo existe & goto FIN
echo directorio creado
mkdir %rep%

:FIN
3
mazkime Mensajes publicados 18 Estado Miembro 11
 
He hecho la prueba y no funciona. Visiblemente, no se trata solo de mi script, sino que incluso directamente en la consola, no puedo hacer funcionar mi prueba.
Me explico:

si creo un directorio TEST directamente en la raíz de C, y pruebo su existencia:

if exist C:\TEST\nul echo Es un directorio

la prueba funciona bien y me muestra "Es un directorio"

Sin embargo, si creo un directorio "TEST TOTO" y pruebo su existencia, la prueba siempre devuelve falso (es decir, no ve que es un directorio), y esto ocurra lo que ocurra en la línea de comando que escriba:

if exist C:\"TEST TOTO"\nul echo Es un directorio
if exist "C:\TEST TOTO"\nul echo Es un directorio
if exist "C:\TEST TOTO\nul" echo Es un directorio

Por lo tanto, busco cómo hacer que la prueba funcione directamente en la consola. En segundo lugar, lo incluiré en el script (esperando que sea sencillo...)
2
bezourox Mensajes publicados 730 Fecha de registro   Estado Miembro Última intervención   143
 
sin "\nul", "test con espacio" se interpreta como archivo y no como carpeta.
2
dubcek Mensajes publicados 18627 Fecha de registro   Estado Colaborador Última intervención   5 659
 
sí, pero si existe un archivo "prueba con espacio", no puedo crear un directorio con ese nombre
2
bezourox Mensajes publicados 730 Fecha de registro   Estado Miembro Última intervención   143
 
ok en el sentido en que quieres usar la función IF para la creación de un directorio, que no es mi caso.
lo que quiero hacer es esto:

Si la carpeta "blablabla" existe
> ir a la carpeta
> buscar el archivo uninstall
> ejecutar la desinstalación del software
De lo contrario
> mostrar "el software bla bla bla no existe"

Imposible por el momento lograr esto.
Mi publicación al respecto:
https://forums.commentcamarche.net/forum/affich-17790540-dos-verifier-l-existance-d-un-dossier#p17790540
2
dubcek Mensajes publicados 18627 Fecha de registro   Estado Colaborador Última intervención   5 659
 
poner la variable entre comillas "%1"
1
stef78
 
Hola a todos,
tenía el mismo problema

el comando if exist c:\toto\

funciona

hasta luego
1
jira
 
Pequeña actualización para aquellos que llegan a este tema buscando la misma información:

@echo off
set rep="test con espacio"
if exist %rep%\nul echo existe & goto FIN
echo directorio creado
mkdir %rep%

:FIN

funciona a la perfección
1
bezourox Mensajes publicados 730 Fecha de registro   Estado Miembro Última intervención   143
 
Hola,

Para mí no funciona...
Si el directorio no existe, efectivamente el script crea el directorio.
Sin embargo, si el directorio existe, no me muestra el mensaje "existe" sino

"directorio creado"
Ya existe un subdirectorio o un archivo <test dosser>.

Configuración: Windows XP / Firefox 3.6
1
Dude76
 
set myDir = %CD%\myDirectory\.
if not exist %myDir% echo No existe !
la adición del "\." también funciona muy bien, y sin "copiar" archivo :)
1
mazkime Mensajes publicados 18 Estado Miembro 11
 
Ya había probado esta solución, y no funciona. Finalmente, he mantenido la solución de Microsoft que funciona muy bien.
0