[Reto Batch] It's a dir?

Iniciado por Eleкtro, 5 Mayo 2012, 11:29 AM

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

-- KiLiaN --

Aqui esta la mia, mucho mas larga y lenta que con forfiles pero bue..como había visto tu solución no quise hacerlo igual..

Código (dos) [Seleccionar]
@echo off
For /F %%i in ('dir /b /A:D') do (echo 1 %%i >> dire.tmp)
For /F %%e in ('dir /B /A:A') do (echo 0 %%e >> archi.tmp)
type dire.tmp >> archi.tmp | sort
For /F "tokens=1,2" %%f in (archi.tmp) do (
if %%f EQU 1 echo [True] %%g
if %%f EQU 0 echo [False] %%g)
del archi.tmp dire.tmp
pause
Entren al chat de elhacker.net
    
   

@kln13

Puntoinfinito

Tienes razon xd...
Uo, me he quedado  :o, en ningún tutorial ni manual básico de Batch hablan de "Forfiles" (al menos los que yo he visitado)...
Encima ni que busques por el cmd no hay ni una pista de este comando.
Modo animado ON.
AHORA EN SOFTONIC || CLICK HERE!!
Base64: QWNhYmFzIGRlIHBlcmRlciAxIG1pbnV0byBkZSB0dSB2aWRhLiBPbOkh



HACK AND 1337 : http://hackandleet.blogspot.com
WEBSITE: http://www.infiniterware.

-- KiLiaN --

Forfiles solo viene en windows7 si tienes xp no te va a funcionar..
Entren al chat de elhacker.net
    
   

@kln13

Puntoinfinito

Ou, que fail.. deberia estar todo en todo, para no crear problemas, siempre igual :/
AHORA EN SOFTONIC || CLICK HERE!!
Base64: QWNhYmFzIGRlIHBlcmRlciAxIG1pbnV0byBkZSB0dSB2aWRhLiBPbOkh



HACK AND 1337 : http://hackandleet.blogspot.com
WEBSITE: http://www.infiniterware.

NekoOs

Cita de: juan196518 en  6 Mayo 2012, 07:14 AM
Hora que me doy cuenta tienes razon no es dir.

No te desanimes juan19658 despues de todo si es DIR
Se que ya ha pasado tiempo sin embargo quisiera contribuir al notar que la respuesta no esta expuesta aqui  ;D

La solucion es relativamente sencilla:
Código (dos) [Seleccionar]
DIR /AD /B

leogtz

No estoy en Windows, pero algo así debería funcionar, bueno, quizás :p

Código (bash) [Seleccionar]
cd dir && (
    echo Es dir
) || (
    echo No es un dir...
)


Saludos.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

NekoOs

Cita de: Leo Gutiérrez. en 30 Junio 2012, 19:58 PM
No estoy en Windows, pero algo así debería funcionar, bueno, quizás :p

Código (bash) [Seleccionar]
cd dir && (
    echo Es dir
) || (
    echo No es un dir...
)


Saludos.
corrígeme si entiendo mal tu code:
Código (bash) [Seleccionar]
cd dir && (             //cd=acceder a                 dir=carpeta llamada dir             &&=si se cumple
echo Es dir             //escribir "es dir"
) || (                  //sino
echo No es un dir       //escribir "No es un dir"

sin embargo la respuesta en caso de no ser un directorio sera "El sistema no puede hallar la ruta especificada" y obviamente escribiría "No es dir"
Aun asi es una solución  ;) quedaria aun mejor si tan solo agregaras un CLS que borre la respuesta de error del comando CD así:
Código (bash) [Seleccionar]
cd dir && (
    echo Es dir
) || (
    cls
    echo No es un dir...
)

el único inconveniente es que solo evaluaría una carpeta llamada dir  :-\ y creo que el reto es reconocer solo los directorios contenidos en un lugar especifico. Por tanto insisto que la solución que plantee es mas acertada sin ánimos de crear polémica ni nada  ;D

leogtz

#27
Sí, al uso de && y || en batch y en algunos lenguajes script se le llama ejecución condicional, podrías buscar un post que escribí sobre ello.

Código (bash) [Seleccionar]
cd dir 2> nul && (
   echo Es dir.
) || (
   echo No es dir.
)


Otra sería usar el comando pushd y popd para regresarse luego que ingreses al directorio.

A ver si funciona esto...

Código (bash) [Seleccionar]
pushd dir 2> nul && (
    echo Es dir
    popd
) || (
   echo No es dir.
)
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

Binary_Death

Pues aquí mi solución:


@Echo Off
set/p "dpath=Path >> "
for /f "tokens=*" %%_ in ('dir /b "%dpath%"') do (
1>nul 2>&1, (dir /b /a:d "%dpath%" | findstr /r /i "^%%_$") && (
echo: TRUE %%_
) || (
echo: FALSE %%_
)
)
pause 1>nul & exit


Con fomato similar a la imagen de ejemplo.

acarllc

Código (bash) [Seleccionar]

@echo off
forfiles /p %1 /c "cmd /c echo @file @isdir"
pause 1>nul


Asumiendo que se le proporciona la ruta por parámetro.

Tengo que averiguar como hacer para que los nombres aparezcan sin dobles comillas.

Happy solving!