Duda script BATCH

Iniciado por simii, 4 Marzo 2015, 00:04 AM

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

simii

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í:

@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?

Eleкtro

Cita de: simii en  4 Marzo 2015, 00:04 AMComo podría hacerlo?

Utilizando los modificadores de las variables de For.

Ejemplo:
@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:
[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








simii

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!

Eleкtro

Busca un poco, tienes la documentación de cada comando en la propia consola de windows...




Cita de: simii en  4 Marzo 2015, 16:06 PMQue significa %%~n#

Es un modificador especial de variable FOR.

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




Cita de: simii en  4 Marzo 2015, 16:06 PMComo 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.htmlCall (command)
Run an internal command, first expanding any variables in the argument.




Cita de: simii en  4 Marzo 2015, 16:06 PMcomo 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!








LaThortilla (Effort)

Hola tengo una duda que quizás ya este mas quemad...

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

LaThortilla (Effort)

Cita de: 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...
@ECHO OFF
FOR /L %%i IN 1,1,101) DO (
echo %%i

)
pause