elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
28 Mayo 2012, 21:31  


Tema destacado: Últimos eventos sobre seguridad/inseguridad

+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting (Moderadores: Novlucker, Leo Gutiérrez., EleKtro H@cker)
| | |-+  Ayuda con BAT leer Archivo
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con BAT leer Archivo  (Leído 6,790 veces)
elecktra

Desconectado Desconectado

Mensajes: 118


Ver Perfil
Ayuda con BAT leer Archivo
« en: 24 Septiembre 2009, 16:08 »

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.


« Última modificación: 24 Septiembre 2009, 18:31 por Leo Gutierrez. » En línea
Leo Gutiérrez.
. . .. ... ..... ........ ............. .....................
Moderador
***
Desconectado Desconectado

Mensajes: 2.968


/^$/


Ver Perfil WWW
Re: Ayuda con BAT leer Archico
« Respuesta #1 en: 24 Septiembre 2009, 16:47 »

Pon un poco del contenido del archivo y lo que has intentado.


En línea

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

leorocko13@hotmail.com
https://github.com/leogtzr/
elecktra

Desconectado Desconectado

Mensajes: 118


Ver Perfil
Re: Ayuda con BAT leer Archico
« Respuesta #2 en: 24 Septiembre 2009, 17:46 »

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 
En línea
Leo Gutiérrez.
. . .. ... ..... ........ ............. .....................
Moderador
***
Desconectado Desconectado

Mensajes: 2.968


/^$/


Ver Perfil WWW
Re: Ayuda con BAT leer Archico
« Respuesta #3 en: 24 Septiembre 2009, 18:31 »

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
@echo off
for /f "tokens=4 delims=_" %%a in (file.txt) do (
echo %%~na
)
set /p =
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:\>
« Última modificación: 24 Septiembre 2009, 18:36 por Leo Gutierrez. » En línea

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

leorocko13@hotmail.com
https://github.com/leogtzr/
elecktra

Desconectado Desconectado

Mensajes: 118


Ver Perfil
Re: Ayuda con BAT leer Archivo
« Respuesta #4 en: 24 Septiembre 2009, 20:39 »

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.
En línea
Leo Gutiérrez.
. . .. ... ..... ........ ............. .....................
Moderador
***
Desconectado Desconectado

Mensajes: 2.968


/^$/


Ver Perfil WWW
Re: Ayuda con BAT leer Archivo
« Respuesta #5 en: 24 Septiembre 2009, 21:55 »

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.
« Última modificación: 24 Septiembre 2009, 22:03 por Leo Gutierrez. » En línea

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

leorocko13@hotmail.com
https://github.com/leogtzr/
elecktra

Desconectado Desconectado

Mensajes: 118


Ver Perfil
Re: Ayuda con BAT leer Archivo
« Respuesta #6 en: 24 Septiembre 2009, 22:16 »

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.
En línea
elecktra

Desconectado Desconectado

Mensajes: 118


Ver Perfil
Re: Ayuda con BAT leer Archivo
« Respuesta #7 en: 28 Septiembre 2009, 14:32 »

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
« Última modificación: 27 Marzo 2011, 19:19 por elecktra » En línea
Leo Gutiérrez.
. . .. ... ..... ........ ............. .....................
Moderador
***
Desconectado Desconectado

Mensajes: 2.968


/^$/


Ver Perfil WWW
Re: Ayuda con BAT leer Archivo
« Respuesta #8 en: 28 Septiembre 2009, 20:47 »

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
En línea

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

leorocko13@hotmail.com
https://github.com/leogtzr/
elecktra

Desconectado Desconectado

Mensajes: 118


Ver Perfil
Re: Ayuda con BAT leer Archivo
« Respuesta #9 en: 28 Septiembre 2009, 21:31 »

Si amigo, te lo agradezco, pero nos e como modificar mi codigo con el tuyo, eso es lo que nos e hacer, gracias.
En línea
Leo Gutiérrez.
. . .. ... ..... ........ ............. .....................
Moderador
***
Desconectado Desconectado

Mensajes: 2.968


/^$/


Ver Perfil WWW
Re: Ayuda con BAT leer Archivo
« Respuesta #10 en: 29 Septiembre 2009, 02:07 »

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.
En línea

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

leorocko13@hotmail.com
https://github.com/leogtzr/
elecktra

Desconectado Desconectado

Mensajes: 118


Ver Perfil
Re: Ayuda con BAT leer Archivo
« Respuesta #11 en: 29 Septiembre 2009, 15:24 »

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.
En línea
Leo Gutiérrez.
. . .. ... ..... ........ ............. .....................
Moderador
***
Desconectado Desconectado

Mensajes: 2.968


/^$/


Ver Perfil WWW
Re: Ayuda con BAT leer Archivo
« Respuesta #12 en: 30 Septiembre 2009, 04:47 »

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é.
« Última modificación: 30 Septiembre 2009, 04:48 por Leo Gutierrez. » En línea

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

leorocko13@hotmail.com
https://github.com/leogtzr/
elecktra

Desconectado Desconectado

Mensajes: 118


Ver Perfil
Re: Ayuda con BAT leer Archivo
« Respuesta #13 en: 30 Septiembre 2009, 15:20 »

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.
En línea
Leo Gutiérrez.
. . .. ... ..... ........ ............. .....................
Moderador
***
Desconectado Desconectado

Mensajes: 2.968


/^$/


Ver Perfil WWW
Re: Ayuda con BAT leer Archivo
« Respuesta #14 en: 1 Octubre 2009, 04:06 »

Modifica el tokens a 3.
En línea

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

leorocko13@hotmail.com
https://github.com/leogtzr/
Páginas: [1] 2 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Como sumar numeros obtenidos al leer un archivo de texto? ayuda please.
Programación Visual Basic
El_Marine 2 1,273 Último mensaje 3 Octubre 2006, 06:46
por <--v1c1ous-->
ayuda con leer un archivo
Programación C/C++
hackmex 1 394 Último mensaje 19 Julio 2008, 23:02
por dooque
[Ayuda] ¿Cómo leer un archivo midi?
Programación Visual Basic
Topyr 14 4,899 Último mensaje 20 Octubre 2008, 19:36
por APOKLIPTICO
AYUDA CON BAT, LEER NOMBRE DE ARCHIVO...
Scripting
elecktra 3 928 Último mensaje 28 Noviembre 2008, 00:56
por Darioxhcx
Ayuda a leer y modificar Bytes de un Archivo
.NET
adan-2994 4 754 Último mensaje 7 Agosto 2011, 02:52
por adan-2994
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines