Comprobar directorios. Problema con espacios (de nuevo)

Iniciado por supertxull, 15 Febrero 2017, 13:54 PM

0 Miembros y 1 Visitante están viendo este tema.

supertxull

Buenas a tod@s. He acabado aquí tras buscar una y otra vez sin resultado...
El caso es que quiero generar un directorio siempre y cuando no exista. ¿Cual es el problema? Como podréis imaginar, si el directorio contiene espacios, no funciona mi script.

set "proy="
cls
SET /P proy=Introduce el nombre del directorio:
echo %proy%
if "%proy%" EQU "" goto menu1
if "%proy%" EQU " " goto menu1
IF NOT EXIST %proy%\NUL (echo OK, no existe) else (echo NO, ya existe)
ping -n 5 0.0.0.0 > nul
goto menu1


¿Puede alguien echarme un cable con el asunto? Gracias de antemano.

Eleкtro

#1
Cita de: supertxull en 15 Febrero 2017, 13:54 PMsi el directorio contiene espacios, no funciona mi script.

Para evitar errories de sintaxis debes encerrar los argumentos/directorios con espacios entre comillas dobles.

Código (DOS,4,8) [Seleccionar]
:menu1
set "proy="
cls
SET /P "proy=Introduce el nombre del directorio: "
Echo:"%proy%"
if "%proy%" EQU "" (goto :menu1)
if "%proy%" EQU " " (goto :menu1)
IF NOT EXIST "%proy%\NUL" (
   echo OK, no existe
) Else (
   echo NO, ya existe
)
ping -n 5 0.0.0.0 > nul
goto :menu1


Hazlo siempre tengan espacios o no, y así evitarás posibles errores.

Saludos!








supertxull

#2
Cita de: Eleкtro en 15 Febrero 2017, 16:25 PM
Para evitar errories de sintaxis debes encerrar los argumentos/directorios con espacios entre comillas dobles.
Hazlo siempre tengan espacios o no, y así evitarás posibles errores.
Saludos!

Muchas gracias por tu ayuda pero, el caso es que no funciona; siempre pasa a Ok, no existe exista o no.
Creo que el problema está en el IF NOT EXIST "%proy%\NUL" pero no sé cómo arreglarlo.

supertxull

RESUELTO!
He optado por probar con otro código y funciona.
Lo dejo por aquí por si es de utilidad para alguien más. Hasta otra y gracias.

set "proy="
set "folder="
cls
SET /P "proy=Introduce el nombre del directorio: "
For /F "tokens=*" %%a in ('Dir /B /A:D') do (
Set "folder=%%a"
if "%proy%"=="%%a" (goto error)
)

Eleкtro

#4
Hola.

Si te fijas, en el código que mostré, en esta linea:
Código (dos) [Seleccionar]
IF NOT EXIST "%proy%\NUL"

La dejé así, tal y como estaba escrita en el primer código que tu mostraste, por que eso me dió a entender que tu querías buscar un directorio llamado "Nul" (a pesar de que sea un nombre ilegal en Windows) dentro del directorio que especificases en la variable %proy%. Es decir, que si en la variable %proy% especificas "Manolo", el código debía buscar un directorio llamado "Nul" dentro del directorio "Manolo". Con el último código que has mostrado parece que aquello que escribiste de "%proy%\Nul" era simplemente por que estuviste probando cosas aleatorias o no se...

En fin, para corregirlo solo debes modificar esa linea para dejar el código que te mostré así:

Código (dos,8) [Seleccionar]
:menu1
set "proy="
cls
SET /P "proy=Introduce el nombre del directorio: "
Echo:"%proy%"
if "%proy%" EQU "" (goto :menu1)
if "%proy%" EQU " " (goto :menu1)
IF NOT EXIST "%proy%\" (
   echo OK, no existe
) Else (
   echo NO, ya existe
)
ping -n 5 0.0.0.0 > nul
goto :menu1


¡Saludos!.








supertxull

Cita de: Eleкtro en 22 Febrero 2017, 05:02 AM
Hola.

Si te fijas, en el código que mostré, en esta linea:

La dejé así, tal y como estaba escrita en el primer código que tu mostraste, por que eso me dió a entender que tu querías buscar un directorio llamado "Nul" (a pesar de que sea un nombre ilegal en Windows) dentro del directorio que especificases en la variable %proy%. Es decir, que si en la variable %proy% especificas "Manolo", el código debía buscar un directorio llamado "Nul" dentro del directorio "Manolo". Con el último código que has mostrado parece que aquello que escribiste de "%proy%\Nul" era simplemente por que estuviste probando cosas aleatorias o no se...

En fin, para corregirlo solo debes modificar esa linea para dejar el código que te mostré así:

¡Saludos!.
Vaya, muchas gracias por la aclaración. Imaginé que NUL era la condición de retorno del NOT EXIST  ;D
Estaré más atento la próxima vez.

Eleкtro

#6
Hola de nuevo :P. No quiero ser pesado pero ya que has mencionado ese detalle, en Batch no puedes especificar arbitrariamente True ni False para evaluar condicionales, eso es algo que se evalua en segundo plano de forma abstracta. Si tu propósito era usar NUL con el propósito real que tiene dentro del lenguaje Batch, entonces aquí puedes hallar más info relevante al respecto:


Saludos!








supertxull

Cita de: Eleкtro en 22 Febrero 2017, 11:02 AM
Hola de nuevo :P. No quiero ser pesado pero ya que has mencionado ese detalle, en Batch no puedes especificar arbitrariamente True ni False para evaluar condicionales, eso es algo que se evalua en segundo plano de forma abstracta. Si tu propósito era usar NUL con el propósito real que tiene dentro del lenguaje Batch, entonces aquí puedes hallar más info relevante al respecto:


Saludos!
¿Pesado? para nada, muchísimas gracias. Me viene de perlas.