Ayuda con for y set

Iniciado por Shinseiki86, 27 Marzo 2009, 18:55 PM

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

Shinseiki86

Hola nuevamente a todos.

En un bat necesito mostrar en pantalla el contenido de un archivo txt (el cual contiene rutas de archivos). Luego dar la opción de seleccionar cual de estos archivos desea ver. La idea que se me ocurre es guardar cada linea del txt en una variable diferente, la cual está determinada por un contador. Pero no me funciona como espero. Coloco comentarios tipo C++ para explicar un poco lo que hice.


:encontrados
set /A count=0
for /f "delims=\ tokens=1-6" %%A in (c:\temp.txt) do (
call:set
echo %count% ¯ %%D: %%F       //El contador se queda en cero
echo %rutacount%     //No se inicializó la variable para este ámbito?
set %rutacount%="%%A\%%B\%%C\%%D\%%E\%%F"
echo.
)
echo Termina el for
echo Ruta1: %ruta1%    //Existe, pero está vació
echo Ruta2: %ruta2%    //Existe, pero está vació
echo contador es %count%  //Ahora si muestra el contador en 2
pause
goto encontrados
...
...
:set
set /A count=count+1
set rutacount=ruta%count%
echo entro a countfor %count%
goto:EOF



Pero devuelve:
...
entro a countfor 1
0 » Simple: 2009-02-06_1_2254695_NI_805001157_EPS018_88_I.TXT
ECHO está desactivado.
La sintaxis del comando no es correcta.

entro a countfor 2
0 » Simple: 2009-03-05_1_2467997_NI_805001157_EPS018_88_I_2009-03.txt
ECHO está desactivado.
La sintaxis del comando no es correcta.

Termina el for
Ruta1:
Ruta2:
contador es 2
Presione una tecla para continuar . . .

**************************************
El contenido de c:\temp.txt es:

O:\X\X\Simple\X\2009-02-06_1_2254695_NI_805001157_EPS018_88_I.TXT
O:\X\X\Simple\X\2009-03-05_1_2467997_NI_805001157_EPS018_88_I_2009-03.txt

Gracias de antemano.

archivo bat completo:
http://es.geocities.com/dico916/b.bat.html

Pony-Magic

SetLocal EnableDelayEdexpansion
For /F "Tokens=*" %%T in (Archivo.txt) Do (
Set /a c+=1
Set Linea_!c!=%%T
)


te queda %Linea_1%, %linea_2%, etc...

Shinseiki86

Problema solucionado!


SetLocal EnableDelayEdexpansion
for /f "delims=\ tokens=1-6" %%A in (c:\temp.txt) do (
set /A count+=1
echo !count! ¯ %%D: %%F
set ruta!count!="%%A\%%B\%%C\%%D\%%E\%%F"
echo.
)



Gracias Pony-Magic. Me pueden explicar usos de setlocal y endlocal ?


Shinseiki86

Ahora tengo otro problema...
Digamos que el usuario digitó 2, osea uqe quiere ver el archivo e
Necesito que notepad %open% abra en el aplicativo notepad el valor guardado en %ruta2%. Pero no funciona.


...
set /p opc="> "                                   //El usuario ingresa 2
if not defined opc (goto encontrados)
set open=%%ruta!opc!%%
if %opc% GEQ 1 (
if %opc% LEQ %count% (
echo ruta!opc! ^= %%ruta!opc!%%  // Imprime "%ruta2%"
echo open ^= %open%                   // Imprime "%ruta2%"
notepad %open%                           //Intenta abrir el archivo "%ruta2%"
)
)
...