Ayuda con BAT leer Archivo

Iniciado por elecktra, 24 Septiembre 2009, 16:08 PM

0 Miembros y 2 Visitantes están viendo este tema.

Aranguez

#20
Hola buenas noches, les dejo este codigo que a mi me funciona para lo que buscan:

echo off
for %%a in (C:\zpru\*.txt) do (
for /f "tokens=1,2* delims=_" %%b in ("%%~na") do (
echo %%d
)
)

Espero te sea de utilidad
Saludos

elecktra

Hola, como estan el programa a utilizar es el Notepad++, es free y muy comodo para trabajar.

elecktra

Amigos, gracias a ustedes, estoy mas serca de terminar este codigo.

Hice esto:

for %%a in (C:\ICR\DATA\?_*_*_*.txt) do (
for /f "tokens=1,2 delims=_" %%b in ("%%a") do (
for /f "tokens=1,2* delims=_" %%b in ("%%~na") do (
for /f "tokens=* delims=0" %%d in ("%%c") do (call :comando %%a %%b %%d)

set n3=%%d
)
)
)
)

goto :eof

:comando
set n0=%~1
set n1=%~nx2
set n2=%~3


C:\ICR\DATA\encolador.exe N %n0% Tabla:Entrada %n1% %n2% N sa sa CDRA-BAS BASCDR
rem --Comprueba si existen las carpetas de empresa y sucursal segun los archivos que encuentre y crea las carpetas--
IF NOT EXIST c:\ICR\DATA\Procesados\%n1%\%n2% MKDIR c:\ICR\DATA\Procesados\%n1%\%n2%
rem --Copia cada archivo txt a su carpeta que corrsponda de empresa y sucursal--
copy /y %n0% "c:\ICR\DATA\Procesados\%n1%\%n2%\"
rem --Elimina los txt del directorio "\DATA\"--
del /q %n0%
rem --Genera un archivo txt en la carpeta "\Registros\" con los comando que creo y ejecuto el BAT--
echo EMPRESA: %n1% SUCURSAL: %n2% PERIODO: %n3%  >>%SYSTEMDRIVE%\ICR\DATA\Procesados\Registros\%date:~0,2%-%date:~3,2%-%date:~6,4%-%time:~0,2%.%time:~3,2%.txt


Ahora si lo gro exportar el txt con los datos necesarios, pero me urgio otro problema.

El txt exportado, es como se saltea una linera, observer, me loe xporta asi:

CitarEMPRESA: 1 SUCURSAL: 5 PERIODO:    
EMPRESA: 1 SUCURSAL: 26 PERIODO:   080801_080831 
EMPRESA: 1 SUCURSAL: 40 PERIODO:   081122_081130 
EMPRESA: 1 SUCURSAL: 72 PERIODO:   080701_080731 
EMPRESA: 1 SUCURSAL: 72 PERIODO:   081215_081215PRUEBA 
EMPRESA: 2 SUCURSAL: 11 PERIODO:   081215_081217PPO 
EMPRESA: 2 SUCURSAL: 411 PERIODO:   080601_080630 
EMPRESA: 3 SUCURSAL: 11 PERIODO:   080601_080630 

me entiende?
es como que no concide.
Gracias.

Me entiendes, simrpe la primer linea del txt aparece en blanco

elecktra

Pero creo que tengo problemas con la variable n3,  si la seteo por debajo de :comando no me da resultados.
Ahora hice bien, porque yo simplemente pegue una linea del codigo que me dejaron arriba en mi codigo, pero veo que hay dos lienas con la misa variable.

for /f "tokens=* delims=0" %%d in ("%%c") do (call :comando %%a %%b %%d)

echo %%d

elecktra

Amigos, me pueden ayudar cone ste problemita?
gracias.

leogtz

Sí se te puede ayudar, pero cuando se tenga tiempo y disposición, no hagas doble post, por favor.
Código (perl) [Seleccionar]

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

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

elecktra

Hola, otra de las cosas que em dic eunta es que no puedo setear una variable despeus de cerrar con )

for %%a in (c:\icr\data\*.txt) do (
for /f "tokens=1,2* delims=_" %%b in ("%%~na") do (
for /f "tokens=* delims=0" %%d in ("%%c") do (call :comando %%a %%b %%d)
rem echo %%d >>prueba.txt

echo %%~na, en el archivo : %%d >>prueba2.txt

rem set n3=%%d

)
)

goto :eof

:comando
set n0=%~1
set n1=%~nx2
set n2=%~3


La variable n3, si la seteo junto a las otras no funciona.

elecktra

Creo saber cual es el problema, peor nos e como solucioanrlo, le sexplico loq eu pienso.. mi codigo original era este:

for %%a in (C:\ICR\DATA\?_*_*_*.txt) do (
for /f "tokens=1,2 delims=_" %%b in ("%%a") do (
for /f "tokens=* delims=0" %%d in ("%%c") do (call :comando %%a %%b %%d)
)
)
goto :eof

:comando
set n0=%~1
set n1=%~nx2
set n2=%~3
set n3=%~n1


Luego el usuarios Aranguez me dejoe ste:

echo off
for %%a in (C:\zpru\*.txt) do (
for /f "tokens=1,2* delims=_" %%b in ("%%~na") do (
echo %%d
)
)


y el de el si em funcionaba, pero el problema es que debia adaptarlo a mi codigo, entonces simplemente a mi codigo le agruegue una linea.

for %%a in (C:\ICR\DATA\?_*_*_*.txt) do (
for /f "tokens=1,2 delims=_" %%b in ("%%a") do (
for /f "tokens=1,2* delims=_" %%b in ("%%~na") do (
for /f "tokens=* delims=0" %%d in ("%%c") do (call :comando %%a %%b %%d)
)
)
goto :eof

:comando
set n0=%~1
set n1=%~nx2
set n2=%~3
set n3=%~n1

Pero cuadno exporto todo a un TXT, no coinciden lso renglones, y tampoco me deja hacer un echoo %%d despues de cerrar los parentecis.
Creoq eu el problema esta en yo al copiar la linea del codigo que em dejaron al mio, se repiten als variables %%d.

Pero como ahgo apra reemplazar por otra letra yq eu fucnione?
No se como hacerlo.
Gracias.


Aranguez

Ok, sustituye la linea tuya:

for /f "tokens=1,2 delims=_" %%b in ("%%a") do (

por esta otra que te di en mi codigo:

for /f "tokens=1,2* delims=_" %%b in ("%%~na") do (

Saludos

elecktra

Hola aranguez, ese metodo ya lo ahbai probado, peor el problema es qeu no puedo setear la variable por debajo del :comando, porque me arroja como resultado:

CitarEMPRESA: 1 SUCURSAL: 5 PERIODO:   %d 
EMPRESA: 1 SUCURSAL: 26 PERIODO:   %d 
EMPRESA: 1 SUCURSAL: 40 PERIODO:   %d 
EMPRESA: 1 SUCURSAL: 72 PERIODO:   %d 
EMPRESA: 1 SUCURSAL: 72 PERIODO:   %d 
EMPRESA: 2 SUCURSAL: 114 PERIODO:   %d 
EMPRESA: 2 SUCURSAL: 11 PERIODO:   %d 
EMPRESA: 2 SUCURSAL: 411 PERIODO:   %d 
EMPRESA: 3 SUCURSAL: 11 PERIODO:   %d 

Cuando deberia ser:

EMPRESA: 1 SUCURSAL: 5 PERIODO: 080801_080831 (y asi por cada linea.)

Es raro proque si seteo una variable antes de cerrar lo ")" me lo muestra pero desfazado:
osea:

CitarEMPRESA: 1 SUCURSAL: 5 PERIODO:    
EMPRESA: 1 SUCURSAL: 26 PERIODO:   080801_080831 
EMPRESA: 1 SUCURSAL: 40 PERIODO:   081122_081130 
EMPRESA: 1 SUCURSAL: 72 PERIODO:   080701_080731 
EMPRESA: 1 SUCURSAL: 72 PERIODO:   081215_081215PRUEBA 
EMPRESA: 2 SUCURSAL: 114 PERIODO:   081215_081217PPO 
EMPRESA: 2 SUCURSAL: 11 PERIODO:   080601_080630 
EMPRESA: 2 SUCURSAL: 411 PERIODO:   080601_080630 
EMPRESA: 3 SUCURSAL: 11 PERIODO:   080601_080630 

Me sta volviendo loco, este code, no lofro identificar el error.
Gracias.