Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: simii en 4 Marzo 2015, 00:04 am



Título: Duda script BATCH
Publicado por: simii en 4 Marzo 2015, 00:04 am
Hola, buenas, soy nuevo en el foro así que saludos a todos!
Hace poco empece con BATCH y se me ocurrió hacer un script que haga lo siguiente:
Listar las carpetas de un directorio establecido en el script y enumerarlo, de forma que quede algo asi

      1- dir1
      2- dir2
      3- dir3

Asi con todas las carpetas que tenga ese directorio. Me quedó algo así
Citar
@echo off
setlocal enabledelayedexpansion
set i=1
for /R D:\carpeta /D %%a in (*) do (
   for /F "tokens=1-3 delims=\" %%b in ("%%a") do (
      echo !i!- %%d
      set /a i=i+1
   )
)
pause

El problema esta en que quiero que se me guarde la ruta en variables, explico lo que quiero conseguir.. Que el script pida el numero de la carpeta osea si pongo un 2 que se abra la carpeta que este numerada con ese numero. Habia pensado en algo así:
Código:
@echo off
setlocal enabledelayedexpansion
set i=1
for /R D:\comp /D %%a in (*) do (
for /F "tokens=1-3 delims=\" %%b in ("%%a") do (
echo !i!- %%d
SET SEL!I!=%%a  *AQUÍ ESTA EL FALLO %%a NO FUNCIONA*
ECHO !SEL4!
set /a i=i+1
)
)
pause


Como podría hacerlo?
Tendría solución?


Título: Re: Duda script BATCH
Publicado por: Eleкtro en 4 Marzo 2015, 06:04 am
Como podría hacerlo?

Utilizando los modificadores de las variables de For.

Ejemplo:
Código:
@Echo OFF & SetLocal EnableDelayedExpansion

For /D /R "C:\Directorio" %%# in ("*") Do (

Set /A "count+=1"
Set "dirName!count!=%%~n#"
Set "dirPath!count!=%%#"

Call Echo [dirName!count!] %%dirName!count!%%
Call Echo [dirPath!count!] %%dirPath!count!%%
Echo+

)

Pause&Exit /B 0

Output:
Código:
[dirName1] Carpeta 1
[dirPath1] C:\Directorio\Carpeta 1

[dirName2] Carpeta 2
[dirPath2] C:\Directorio\Carpeta 2

[dirName3] Carpeta 3
[dirPath3] C:\Directorio\Carpeta 3

Presione una tecla para continuar . . .

Saludos


Título: Re: Duda script BATCH
Publicado por: simii en 4 Marzo 2015, 16:06 pm
Te agradezco la respuesta, me ha ayudado mucho!
Tengo unas dudas:
Que significa %%~n#
Como funciona el CALL antes de un echo
Y como podría hacer que los subdirectorios no aparezcan, porque al haber una carpeta dentro la lista también.
Gracias!


Título: Re: Duda script BATCH
Publicado por: Eleкtro en 8 Marzo 2015, 05:17 am
Busca un poco, tienes la documentación de cada comando en la propia consola de windows...



Que significa %%~n#

Es un modificador especial de variable FOR.

Código:
For /?
Cita de: For /?
Ejecuta el comando para cada uno de los archivos especificados en el
conjunto de archivos.

%~nI        - expande %I solo a un nombre de archivo



Como funciona el CALL antes de un echo

Funciona de la misma manera que sin el Call, pero expandiendo las variables.

Cita de: http://ss64.com/nt/call.html
Call (command)
Run an internal command, first expanding any variables in the argument.



como podría hacer que los subdirectorios no aparezcan, porque al haber una carpeta dentro la lista también.

No entiendo la pregunta, intenta ser más específico.
Si te refieres a que en el script de arriba quieres que no "aparezcan" los subdirectorios solo tienes que eliminar el segundo Echo.

Saludos!


Título: Re: Duda script BATCH
Publicado por: LaThortilla (Effort) en 9 Marzo 2015, 00:09 am
Hola tengo una duda que quizás ya este mas quemad...

Como imprimo números del 1 al 100 con un bucle for...


Título: Re: Duda script BATCH
Publicado por: LaThortilla (Effort) en 9 Marzo 2015, 04:15 am
Hola tengo una duda que quizás ya este mas quemad...

Como imprimo números del 1 al 100 con un bucle for...
@ECHO OFF
FOR /L %%i IN 1,1,101) DO (
echo %%i

)
pause