Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: elecktra en 24 Septiembre 2009, 16:08 pm



Título: Ayuda con BAT leer Archivo
Publicado por: elecktra en 24 Septiembre 2009, 16:08 pm
Hola, comoe stan, les cuento mi problema, tengo desarrollado un codigo que me lee nombre de archivos TXT y envia un mail, el nobre del archivo suele tener el siguiente formato 2_00411_080601_080630.TXT yo solo necesito loq ue se encuentra del segundo "_" para atras, entonces lo leia con una variable %n3:~-13%, con ese codigo solo leia los 13 caracteres finales sin al extensión.
el problema es que ahora tengo una modificacion, algunco TXT se le pueden agregar de 1 a 4 letras al final.
Pero si pongo %n3:~-17% y el archivo tinen 15 acaracteres me toma otros valores.
resumiendo como logro leer desde el segundo "_" para atras sin importar la cantidad.
Espero me puedan ayudar, gracias.


Título: Re: Ayuda con BAT leer Archico
Publicado por: leogtz en 24 Septiembre 2009, 16:47 pm
Pon un poco del contenido del archivo y lo que has intentado.


Título: Re: Ayuda con BAT leer Archico
Publicado por: elecktra en 24 Septiembre 2009, 17:46 pm
Pero amigo ya fui calro, tengo archivos de texto con el siguiente formato:

2_00411_080601_080630.TXT

Yo necesito leer el nombre de archivo sin extensión apartir del segundo "_" osea en este caso necesitaria 080601_080630

pero el problema es que aveces el archivo puede ser mas largo ejemplo.

2_00411_080601_080630HL.TXT ó 2_00411_080601_080630POTE.TXT 


Título: Re: Ayuda con BAT leer Archico
Publicado por: leogtz en 24 Septiembre 2009, 18:31 pm
Código:
C:\>type file.txt
2_00411_080601_080630.TXT
2_00411_080601_080630HL.TXT
2_00411_080601_080630POTE.TXT
C:\>code.bat
080630
080630HL
080630POTE

C:\>
Código
  1. @echo off
  2. for /f "tokens=4 delims=_" %%a in (file.txt) do (
  3. echo %%~na
  4. )
  5. set /p =
  6. exit /b 0

Código:
C:\>type "file.txt" | for /f "tokens=4 delims=_" %a in (file.txt) do @echo %a
080630.TXT
080630HL.TXT
080630POTE.TXT

C:\>


Título: Re: Ayuda con BAT leer Archivo
Publicado por: elecktra en 24 Septiembre 2009, 20:39 pm
No logro hacerlo funcionar, mira te muestro el pedazop de codigo que tengo yo.

Código:
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

Ese codigo me busca lso archivos de texto en el directorio,

me gustaria reemplazar el set n3=%~n1 por lo que te pido arriba.
gracias.


Título: Re: Ayuda con BAT leer Archivo
Publicado por: leogtz en 24 Septiembre 2009, 21:55 pm
A ver, es que no te has explicado bien, ¿un sólo archivo de texto contiene todos los nombres de archivo? o diferentes archivos?

En caso de que sean diferentes archivos, ejemplo, tengo los siguientes archivos que contienen nombres de archivos:
Código:
C:\>type *.txt

file.txt


2_00411_080601_080630.TXT
2_00411_080601_080630HL.TXT
2_00411_080601_080630POTE.TXT
file2.txt


2_00411_080601_080630.TXT
2_00411_080601_080630HL.TXT
2_00411_080601_080630POTE.TXT
file3.txt


2_00411_080601_080630.TXT
2_00411_080601_080630HL.TXT
2_00411_080601_080630POTE.TXT
file4.txt


2_00411_080601_080630.TXT
2_00411_080601_080630HL.TXT
2_00411_080601_080630POTE.TXT
C:\>

Con un código así podrías conseguirlo:
Código:
@echo off
for %%_ in (*.txt) do (
for /f "tokens=4 delims=_" %%a in (%%_) do (
echo %%~na
)
)

Salida:
Código:
C:\>code.bat
080630
080630HL
080630POTE
080630
080630HL
080630POTE
080630
080630HL
080630POTE
080630
080630HL
080630POTE

C:\>

Es decir, se procesan todos los archivos de texto del directorio actual y se extrae lo que quieres.


Título: Re: Ayuda con BAT leer Archivo
Publicado por: elecktra en 24 Septiembre 2009, 22:16 pm
Es verdad disculpame, se me olvido aclarar ese detalle, el BAt revisa en un directorio todos lso txt, pero solo el nombre de archivo, o el contenido y nesecito extraer lo que se encuentra detras del segundo "_"
ejemplo:

2_00411_080601_080630POTE.TXT

Con el codgido que me dejaste arriba puedo hacerlo, porque po lo qeu veo, lee una parte sola del nombre.


Título: Re: Ayuda con BAT leer Archivo
Publicado por: elecktra en 28 Septiembre 2009, 14:32 pm
Bue amigo aqui te dejo el codigo que armado anteriormente con un poco de la ayuda de ustedes. miralo y te exoplico cual es la modificacionq ue quiero realizar ahora.

Código:
@echo off
title Encolador Automatico Uso especial en CDRA
color 4f
ECHO --------------------------------------------------------------------------
echo ENCOLADOR AUTOMATICO ICR xxxxx
ECHO --------------------------------------------------------------------------
echo.
echo.

rem --Crea los directorios "Procesados, 1, 2, 3, Registros"--
echo Creando Directorios de Respaldo
echo.
IF NOT EXIST c:\ICR\DATA\Procesados MKDIR c:\ICR\DATA\Procesados
IF NOT EXIST c:\ICR\DATA\Procesados\1 MKDIR c:\ICR\DATA\Procesados\1
IF NOT EXIST c:\ICR\DATA\Procesados\2 MKDIR c:\ICR\DATA\Procesados\2
IF NOT EXIST c:\ICR\DATA\Procesados\3 MKDIR c:\ICR\DATA\Procesados\3
IF NOT EXIST c:\ICR\DATA\Procesados\Registros MKDIR c:\ICR\DATA\Procesados\Registros
cls

rem --Crea en la carpeta "ICR" un Script que borra los txt con un mes de antiguedad--
rem --EL SCRIPT BORRA DESDE LA CARPETA "PROCESADOS" TODAS LAS SUBCARPETAS QUE ENCUENTRE DENTRO.
echo Creando Script de VBS
echo ^set objshell = createobject("wscript.shell") >> delfull.vbs
echo objshell.run "cmd /c dir C:\ICR\DATA\Procesados /s /b > temp.txt",vbhide >> delfull.vbs
echo wscript.sleep 2000 >> delfull.vbs
echo ^set objfso = createobject("scripting.filesystemobject") >> delfull.vbs
echo ^set temp = objfso.opentextfile("temp.txt",1) >> delfull.vbs
echo do until temp.atendofstream >> delfull.vbs
echo fi = temp.readline >> delfull.vbs
echo if objfso.fileexists(fi) = true then >> delfull.vbs
echo if objfso.getfile(fi).parentfolder.name ^<^> Registros then >> delfull.vbs
echo if datediff("m",objfso.getfile(fi).datecreated,now()) ^>= 1 then >> delfull.vbs
echo objfso.deletefile(objfso.getfile(fi).path) >> delfull.vbs
echo end if >> delfull.vbs
echo end if >> delfull.vbs
echo end if >> delfull.vbs
echo loop >> delfull.vbs
echo temp.close >> delfull.vbs

rem --Este codigo ejecuta el Script creado en la carpeta--
start /wait delfull.vbs

rem --Borra el Script de la carpeta--
del delfull.vbs

rem --Esto borra el txt creado por el script VBS--
del temp.txt

rem --Busca los txt del directorio "\DATA\", segun la empresa y la sucursal genera el codigo y lo ejecuta--
echo Se cargaran los Archivos y se Realizara el Backup
echo.
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
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:~-13% >>%SYSTEMDRIVE%\ICR\DATA\Procesados\Registros\%date:~0,2%-%date:~3,2%-%date:~6,4%-%time:~0,2%.%time:~3,2%.txt

Como pueden ver esta sección:

Código:
echo EMPRESA: %n1% SUCURSAL: %n2% PERIODO: %n3:~-13% >>%SYSTEMDRIVE%\ICR\DATA\Procesados\Registros\%date:~0,2%-%date:~3,2%-%date:~6,4%-%time:~0,2%.%time:~3,2%.txt

exporto un archivo de txt de registro, dentro del mismo me guarda partes de los archivos encontrados en el directorio, pero necesito que el PERIODO: ya no sea %n3:~-13%, osea que no me guarde los ultimo 13 caracteres si no todo los que hay desde el segundo "_" hasta la extensión (sin incluir esta).
ejemplo:

2_00411_080601_080630POTE.TXT
1_00411_080601_080630EE.TXT

La verdad no logro hacerlo.
Espero me puedan ayudar.
Gracias.

Nota del mod:he corregido las etiquetas


Título: Re: Ayuda con BAT leer Archivo
Publicado por: leogtz en 28 Septiembre 2009, 20:47 pm
Pero es que ya te he explicado y dejado el codigo que hace exactamente lo que quieres.

No tienes por que usar extraccion de caracteres, con saber usar un poco de for y los tokens, con eso puedes.
Código:
http://foro.portalhacker.net/index.php/topic,86033.0.html
Código:
http://foro.elhacker.net/scripting/acciones_sobre_archivos_de_texto_batch-t242748.0.html


Título: Re: Ayuda con BAT leer Archivo
Publicado por: elecktra en 28 Septiembre 2009, 21:31 pm
Si amigo, te lo agradezco, pero nos e como modificar mi codigo con el tuyo, eso es lo que nos e hacer, gracias.


Título: Re: Ayuda con BAT leer Archivo
Publicado por: leogtz en 29 Septiembre 2009, 02:07 am
Sólo modifica esto:
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)
)
)
Por esto:
Código:
for %%a in (C:\ICR\DATA\*.txt) do (
for /f "tokens=4 delims=_" %%_ in (%%a) do (
echo %%~n_
)
)

Eso probablemente te mostrará lo que quieres, luego puedes manejar la variable "%%~n_" como desees.


Título: Re: Ayuda con BAT leer Archivo
Publicado por: elecktra en 29 Septiembre 2009, 15:24 pm
Hola, comoe stas? amigo, la verdad no logro hacer que fucniones, si uso el codigop que me pasaste, ya me deja de fucnioanr el BAT y no trabajr como deberia, te explico que necesito, apra ver si me peude hechar ua mano.

Código:
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

Con ese codigo, yo kleo cada  nombre de txt del directorio, ejemplo: 1_00026_081122_081130.txt
luego con la variable set n1=%~nx2 extraigo 1 (1_00026_081122_081130.txt)
Con la variable set n2=%~3 extraigo el 26 (1_00026_081122_081130.txt)
Con al variable set n3=%~n1 extraigo el 1_00026_081122_081130.txt

esta ultima variable es la que neceito modificar, apra que ya no me cuente los 13 caracteres si no que me cuento doto lo que alla desde el "_" hasta el .txt (sin incluir este) y sin importar la catidad y tipo de caracteres, me entiendes?
Ejemplo: 00026_081122_081130.txt ó 00026_081122_081130PRUEBA.txt
El tema es que yo no se utilizar los tokens, anteriormente me ayudaron ustedes con este problema.
Y trate de probar el codigo con mis conocimientos, peor no logro ahcerlo fucnioanr.
Gracias.


Título: Re: Ayuda con BAT leer Archivo
Publicado por: leogtz en 30 Septiembre 2009, 04:47 am
A ver, tu lo que quires es esto:


Citar
exporto un archivo de txt de registro, dentro del mismo me guarda partes de los archivos encontrados en el directorio, pero necesito que el PERIODO: ya no sea %n3:~-13%, osea que no me guarde los ultimo 13 caracteres si no todo los que hay desde el segundo "_" hasta la extensión (sin incluir esta).
ejemplo:

2_00411_080601_080630POTE.TXT
1_00411_080601_080630EE.TXT

A partir del segundo _ pero sin la extensión:
Código:
@echo off
cd /d "%homedrive%\icr\data"
:: No hace falta indicar la ruta de los archivos de texto en el for, ya que
:: estamos en ese mismo directorio.
:: Procesamos todos los archivos .txt del directorio local.
:: Segun lo que tu has descrito, tu quieres todo lo que esta despues del segundo '_', pero
:: sin la extension:
for %%_ in (*.txt) do (
for /f "tokens=4 delims=_" %%a in (%%_) do (
echo %%~na, en el archivo : %%a
)
)
pause>nul
La salida generada:

Código:
C:\>code.bat
080630, en el archivo : 080630.TXT
080630HL, en el archivo : 080630HL.TXT
080630POTE, en el archivo : 080630POTE.TXT
080630, en el archivo : 080630.TXT
080630HL, en el archivo : 080630HL.TXT
080630POTE, en el archivo : 080630POTE.TXT
080630, en el archivo : 080630.TXT
080630HL, en el archivo : 080630HL.TXT
080630POTE, en el archivo : 080630POTE.TXT
080630, en el archivo : 080630.TXT
080630HL, en el archivo : 080630HL.TXT
080630POTE, en el archivo : 080630POTE.TXT

C:\icr\data>

No entiendo cual es el problema, los codigos que te he dado hacen exactamente lo que pides.

Por mi parte es todo, ya no te ayudaré.


Título: Re: Ayuda con BAT leer Archivo
Publicado por: elecktra en 30 Septiembre 2009, 15:20 pm
Amigo, ya encontre porque me falla, en realidad tu estas ahciendo el codgi a partir del tercer "_" no del segun como como te decia, essimplemente eso, como modifico tu codigo?
Gracias.


Título: Re: Ayuda con BAT leer Archivo
Publicado por: leogtz en 1 Octubre 2009, 04:06 am
Modifica el tokens a 3.


Título: Re: Ayuda con BAT leer Archivo
Publicado por: elecktra en 2 Octubre 2009, 17:13 pm
Hola, perdona por insisteir, pero hay algo que no emesta funcionando.. porque al adaptarlo a mi y exportarlo a un txt, me sale esto:
%%~na, en el archivo : %%a
%%~na, en el archivo : %%a
%%~na, en el archivo : %%a
%%~na, en el archivo : %%a

cuando deberia aparecer otro dato.
Por otro aldo tu estas leyendo el contenido del txt o el nombre, porque no necesito leer el nombre.
Gracias.


Título: Re: Ayuda con BAT leer Archivo
Publicado por: elecktra en 2 Octubre 2009, 22:11 pm
Mira, pues hice lo que me has dicho, cambie el tokens a 3 pero solo me muestra lo que se encuentra detras del tercer "_"
Estuve probando con otros valores y con un %%_*_ pero tampoco funciono.
me das una manito.
Gracias.

(http://i36.tinypic.com/35bvzaa.png)


Título: Re: Ayuda con BAT leer Archivo
Publicado por: CaronteGold en 3 Octubre 2009, 00:06 am
   Siento interrumpir... elektra, ¿Cuál es ese programa?


Título: Re: Ayuda con BAT leer Archivo
Publicado por: leogtz en 3 Octubre 2009, 05:38 am
Mira, pues hice lo que me has dicho, cambie el tokens a 3 pero solo me muestra lo que se encuentra detras del tercer "_"
Estuve probando con otros valores y con un %%_*_ pero tampoco funciono.
me das una manito.
Gracias.

(http://i36.tinypic.com/35bvzaa.png)

Pon el código.


Título: Re: Ayuda con BAT leer Archivo
Publicado por: xassiz_ en 3 Octubre 2009, 13:45 pm
   Siento interrumpir... elektra, ¿Cuál es ese programa?
Notepad 2


Título: Re: Ayuda con BAT leer Archivo
Publicado por: Aranguez en 4 Octubre 2009, 02:56 am
Hola buenas noches, les dejo este codigo que a mi me funciona para lo que buscan:
Código:
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


Título: Re: Ayuda con BAT leer Archivo
Publicado por: elecktra en 5 Octubre 2009, 15:19 pm
Hola, como estan el programa a utilizar es el Notepad++, es free y muy comodo para trabajar.


Título: Re: Ayuda con BAT leer Archivo
Publicado por: elecktra en 5 Octubre 2009, 17:57 pm
Amigos, gracias a ustedes, estoy mas serca de terminar este codigo.

Hice esto:

Código:
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:

Citar
EMPRESA: 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


Título: Re: Ayuda con BAT leer Archivo
Publicado por: elecktra en 5 Octubre 2009, 19:25 pm
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


Título: Re: Ayuda con BAT leer Archivo
Publicado por: elecktra en 6 Octubre 2009, 15:35 pm
Amigos, me pueden ayudar cone ste problemita?
gracias.


Título: Re: Ayuda con BAT leer Archivo
Publicado por: leogtz en 6 Octubre 2009, 16:56 pm
Sí se te puede ayudar, pero cuando se tenga tiempo y disposición, no hagas doble post, por favor.


Título: Re: Ayuda con BAT leer Archivo
Publicado por: elecktra en 7 Octubre 2009, 17:00 pm
Hola, otra de las cosas que em dic eunta es que no puedo setear una variable despeus de cerrar con )

Código:
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.


Título: Re: Ayuda con BAT leer Archivo
Publicado por: elecktra en 7 Octubre 2009, 17:21 pm
Creo saber cual es el problema, peor nos e como solucioanrlo, le sexplico loq eu pienso.. mi codigo original era este:

Código:
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:

Código:
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.



Título: Re: Ayuda con BAT leer Archivo
Publicado por: Aranguez en 8 Octubre 2009, 02:16 am
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


Título: Re: Ayuda con BAT leer Archivo
Publicado por: elecktra en 8 Octubre 2009, 16:50 pm
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:

Citar
EMPRESA: 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:

Citar
EMPRESA: 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.


Título: Re: Ayuda con BAT leer Archivo
Publicado por: Aranguez en 9 Octubre 2009, 05:27 am
Hola, prueba con este codigo, pon ojo al directorio y a las letras de las variables que cambiaron.

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

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

echo %n0%
echo %n1%
echo %n2%
echo %n3%

los echo se los puse para chequear, espero que te sirva