[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

  1. 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
    1. ChemicalMouse
       
      ¡nítido!!!!
      0
  2. 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
  3. 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
    1. 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
  4. Drallieiv
     
    si existe "C:\TEST TOTO\nul" echo Es un directorio

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

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

    :FIN
    3
  6. 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
  7. 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
  8. dubcek Mensajes publicados 18627 Fecha de registro   Estado Colaborador Última intervención   5 660
     
    sí, pero si existe un archivo "prueba con espacio", no puedo crear un directorio con ese nombre
    2
  9. 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
  10. dubcek Mensajes publicados 18627 Fecha de registro   Estado Colaborador Última intervención   5 660
     
    poner la variable entre comillas "%1"
    1
  11. stef78
     
    Hola a todos,
    tenía el mismo problema

    el comando if exist c:\toto\

    funciona

    hasta luego
    1
  12. 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
  13. 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
  14. 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
  15. 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