[batch] Probar la existencia de un directorio (a
Resuelto
mazkime
Mensajes publicados
18
Estado
Miembro
-
ChemicalMouse -
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
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
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! :-)
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! :-)
ChemicalMouse
¡nítido!!!!
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...
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...
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!
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!
y así
@echo off
set rep="test con espacio"
if exist %rep% echo existe & goto FIN
echo directorio creado
mkdir %rep%
:FIN
@echo off
set rep="test con espacio"
if exist %rep% echo existe & goto FIN
echo directorio creado
mkdir %rep%
:FIN
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...)
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...)
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
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
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
@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
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
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