Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: leogtz en 24 Enero 2009, 00:30



Título: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 24 Enero 2009, 00:30
Manipular y visualizar informacion de archivos externos. por Leo Gutiérrez.



Atención

Cuando busquen ayuda, por favor dejar claramente una muestra de cómo está el archivo o lo que quieren extraer del archivo y como quieren que quede, para entendernos con más claridad.



Tomaremos como ejemplo el siguiente texto :


Perl es un lenguaje de programación diseñado por Larry Wall creado en 1987.
Perl toma características del C, del lenguaje interpretado shell (sh), AWK,
sed, Lisp y, en un grado inferior, de muchos otros lenguajes de programación.

Estructuralmente, Perl está basado en un estilo de bloques como los del C
o AWK, y fue ampliamente adoptado por su destreza en el procesado de texto
y no tener ninguna de las limitaciones de los otros lenguajes de script.


Que será TEXTO.TXT


Volcar cierto texto a un archivo de texto :

Código:
echo Hola > file.txt
Código:
> Adios.txt echo "Mi texto."
Código:
@echo off
(
echo Linea1
echo Linea2
echo Linea3...
) > "file.txt"

Bash:
Código
  1. echo -e "Texto" > "file.txt"
Código
  1. echo -e "`ls -1`" >> "file.txt"
Código
  1. > "file.txt" echo -e "Hola mundo!"
Código
  1. cat <<EOF > "file.txt"
  2. Hola mundo cruel!
  3. Lineas
  4. Lineas
  5. EOF
Código
  1. (
  2. echo -e "Lineas";
  3. echo -e "Más lineas";
  4. echo -e "Más más lineas";
  5. ) > "file.txt"
  6.  

Mostrar el contenido de un archivo de texto :
Código:
type texto.txt
Código:
for /f "tokens=*" %%x in (texto.txt) do (echo %%x)

Contar lineas de un archivo de texto (Lineas en blanco tambien) :
Código:
C:\>type texto.txt | find /v /c "" < texto.txt
7

C:\>
Contar lineas (Sin lineas en blanco) :
Código:
@echo off
set /a contador=0
for /f "" %%x in (texto.txt) do (
call :contador %%x
)
echo Lineas : %contador%
pause>nul
goto:eof
:contador
set /a contador+=1
goto:eof

[/b]

Obtener informacion del archivo de texto (tamaño, fecha, atributos, etc) :
Código:
@echo off
for %%- in (texto.txt) do (
echo Nombre : %%~n-
echo Extension : %%~x-
echo Unidad : %%~d-
echo Ruta : %%~p-
echo Ruta completa : %%~s-
echo Fecha-Hora del archivo : %%~t-
echo Atributos : %%~a-
echo Nombre y extension : %%~nx-
)
pause>nul
exit /b 0

[/b]

Otra forma :


Código:
@echo off
call :info texto.txt
goto:eof
:info
echo Nombre : %~n1
echo Extension : %~x1
echo Unidad : %~d1
echo Ruta : %~p1
echo Ruta completa : %~s1
echo Fecha-Hora del archivo : %~t1
echo Atributos : %~a1
echo Nombre y extension : %~nx1
pause>nul
goto:eof


Contar caracteres de un archivo :
Código:
@echo off
set /a contador=0
set /a contadorL=0
for /f "tokens=*" %%x in (texto.txt) do (
set linea=%%x
call :contador %linea%
)
goto:eof
:contador
set /a contadorl+=1
if not defined linea (
echo %contador%
goto:eof
)
set linea=%linea:~1%
set /a contador+=1
goto:contador
Contar palabras de un archivo de texto :
Código:
@ECHO OFF
::CONTADOR DE PALABRAS
::AUTOR: CARLOS
::USO: CONTAR.BAT ARCHIVO.TXT
::O ARRASTRE ARCHIVO.TXT Y COLOQUE SOBRE EL ICONO DEL SCRIPT.

SETLOCAL
SET "ARCHIVO=%~1"
SET /A "PALABRAS=0"
FOR /F "USEBACKQ TOKENS=*" %%A IN ("%ARCHIVO%") DO (
SET "LINEA=%%A"
IF DEFINED LINEA (
CALL :CONTA LINEA
)
)
ECHO.CANTIDAD_PALABRAS:%PALABRAS%
PAUSE
ENDLOCAL
GOTO :EOF

:CONTA
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /F "TOKENS=1*" %%B IN ("!%~1!") DO (
SET "PAL=%%B"
SET "RESTO=%%C"
IF DEFINED PAL (SET /A PALABRAS+=1)
IF DEFINED RESTO (CALL :CONTA RESTO)
)
ENDLOCAL & SET /A "PALABRAS=%PALABRAS%"
GOTO :EOF
Autor : Carlos.


Crear archivos vacios (0 kb) :
Manera brusca :
Código:
lksdfljskdfljksdf > file.txt
Código:
fsutil file createnew file.txt 0
Código:
ver | find "kjflskdfjlsjkdf" > file.txt

Código:
C:\>copy con vacio.txt > nul
^Z

C:\>
Enumerar lineas de archivos :

Lista lineas en blanco tambien.
Código:
@echo off
rem Mostrar lineas de archivos :
echo. > temp.txt
if ["%~1"]==[""] (
echo Pocos parametros!
goto:eof
)
for /f "skip=2 tokens=*" %%x in ('fc /c /n temp.txt "%~1" ^| findstr -v -mi "*****"') do (
echo %%x
)
del /f /q "temp.txt"
goto:eof


Este no lista lineas en blanco :

Código:
@echo off
if ["%~1"]==[""] (
echo Pocos parametros!
goto:eof
)
set /a linea=0
for /f "tokens=*" %%x in ('type "%~1"') do (
call :show %%x
)
goto:eof

:show
set /a linea+=1
echo %linea% : %*
goto:Eof

Eliminar cierta linea de un archivo de texto :
Código:
@echo off
(
ECHO 2d
ECHO E
) | EDLIN /B texto.txt > nul 2>&1
En este caso eliminariamos la linea 2.

Copiar el contenido de un archivo de texto a otro:
Código:
type texto.txt > texto2.txt
Siendo texto2.txt el nuevo archivo de texto.

Editar cierta linea de un archivo de texto :

Código:
@echo off
(
echo 2
echo Gutierrez
echo w
echo e
) | edlin /b texto2.txt
Siendo "2" la linea que editaremos, y "Gutierrez" por lo que será cambiado el texto.

Copiar cierta linea al final del mismo archivo de texto :

Código:
@echo off
(
echo 1,1,100,1c
echo e
) | edlin /b texto2.txt
Se copiaria la linea 1 al final del archivo, si quieren copiar la linea 2 al final del archivo seria :
Código:
echo 2,2,100,1c
Mover la primera linea al final del archivo de texto :

Código:
@echo off
(
echo 1,1,4M
echo e
) | edlin /b texto2.txt
Mover la primera linea a la segunda linea de un archivo :
Código:
@echo off
(
echo 1,1,3M
echo e
) | edlin /b texto2.txt
Mover la segunda linea a la primera linea :
Código:
@echo off
(
echo 2,2,1M
echo e
) | edlin /b texto2.txt
Mover la tercera linea a la primera :

Código:
@echo off
(
echo 3,3,1M
echo e
) | edlin /b texto2.txt
Visualizar solo las primeras 10 lineas de un archivo :
Código:
@ECHO OFF
SET /A NLINES=0
FOR /F "TOKENS=*" %%X IN (%~1) DO (
CALL :SUB %%X
)
GOTO:EOF

:SUB
IF %NLINES% EQU 10 (GOTO:EOF)
SET /A NLINES+=1
ECHO %NLINES% : %*
GOTO:EOF
Visualizar una linea en la que sabemos que existen ciertas palabras:

Suponiendo que este es nuestro texto, y queremos visualizar todas las lineas que contengan "Perl"

Código:
Perl es un lenguaje de programación diseñado por Larry Wall creado en 1987.
Perl toma características del C, del lenguaje interpretado shell (sh), AWK,
sed, Lisp y, en un grado inferior, de muchos otros lenguajes de programación.

Estructuralmente, Perl está basado en un estilo de bloques como los del C
o AWK, y fue ampliamente adoptado por su destreza en el procesado de texto
y no tener ninguna de las limitaciones de los otros lenguajes de script.
Código:
type texto.txt | find /i "Perl"
Contar las lineas que coincidan con cierta busqueda :
Código:
type texto.txt | find /i /c "Perl"
Tomando como ejemplo el texto anterior, nos dará el numero 3, que es el numero de lineas encontradas.

Leer datos dentro de un txt, compararlos y dar un resultado... es posible?
http://foro.portalhacker.net/index.php/topic,86703.new.html
 (http://foro.portalhacker.net/index.php/topic,86703.new.html)

Remover lineas en blanco de un archivo de texto :
Código:
@echo off
echo Mi archivo con lineas en blanco :
type "file.txt"
for /f %%x in ('type "file.txt"') do (
echo %%x >> file2.txt
)
echo.
echo Mi archivo sin lineas en blanco :
type file2.txt
Otra manera, usando expresiones regulares con findstr
Código:
findstr /v "^$" file.txt
^ : Inicio de linea.
$ : Fin de linea.
/v : Solo muestra lo que no coincida con la expresion.

Sustituir una columna en un archivo de texto :
Supongamos que tenemos un archivo de texto con el contenido :
Código:
123 234 345 456 567 678 789 890
123 234 345 456 567 678 789 890
123 234 345 456 567 678 789 890
123 234 345 456 567 678 789 890
Y queremos sustituir "234" por algo :

Código:
@echo off
type texto.txt
for /f "tokens=1-8" %%a in ('type texto.txt') do (
echo %%a "RockoX" %%c %%d %%e %%f %%g %%h >> texto2.txt
)
echo:
type texto2.txt
Tip provisto por Tomi Salmi.

Contar la cantidad de archivos de texto en un directorio:
Código:
dir /b *.txt | find /c ".txt"
Código:
dir /b *.txt | findstr /n ".txt$"
Intercambiar cierto palabra por otra :
Supongamos que queremos cambiar todas las palabras que digan "Perl", por C :
Código:
@echo off
setlocal enabledelayedexpansion
for /f "tokens=* delims=" %%x in ('type texto.txt') do (
set linea=%%x
set linea=!linea:Perl=C!
call :show !linea!
)
goto:eof
:show
echo %* >> out.txt
goto:eof

Cambiar todo el texto de un archivo de texto a mayusculas :
Código:
@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%x in ('type texto.txt') do (
set linea=%%x
call :code !linea!
)
goto:eof
:code
SET WORD=%*
if not defined word (Echo Error & goto:eof)
for %%x in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (call :rename %%x)
echo %word%
goto:Eof
:rename
call set word=%%word:%1=%1%%
goto:eof
La salida que da :
Código:
PERL ES UN LENGUAJE DE PROGRAMACI¾N DISE±ADO POR LARRY WALL CREADO EN 1987.
PERL TOMA CARACTERÝSTICAS DEL C, DEL LENGUAJE INTERPRETADO SHELL (SH), AWK,
SED, LISP Y, EN UN GRADO INFERIOR, DE MUCHOS OTROS LENGUAJES DE PROGRAMACI¾N.
ESTRUCTURALMENTE, PERL ESTß BASADO EN UN ESTILO DE BLOQUES COMO LOS DEL C
O AWK, Y FUE AMPLIAMENTE ADOPTADO POR SU DESTREZA EN EL PROCESADO DE TEXTO
Y NO TENER NINGUNA DE LAS LIMITACIONES DE LOS OTROS LENGUAJES DE SCRIPT.

Saber que lineas de un archivo de texto son las que estan vacias :

Código:
@echo off
for /f "tokens=*" %%x in ('type texto.txt ^| findstr /n "^$"') do (
echo %%x Linea vacia.
)

Cambiar todo el contenido de un archivo de texto a minusculas :
Código:
@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%x in ('type texto.txt') do (
set linea=%%x
call :code !linea!
)
goto:eof
:code
SET WORD=%*
if not defined word (Echo Error & goto:eof)
for %%x in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do (call :rename %%x)
echo %word%
goto:Eof
:rename
call set word=%%word:%1=%1%%
goto:eof

Salida :
Código:
perl es un lenguaje de programaci¥n dise▒ado por larry wall creado en 1987.
perl toma caracter¦sticas del c, del lenguaje interpretado shell (sh), awk,
sed, lisp y, en un grado inferior, de muchos otros lenguajes de programaci¥n.
estructuralmente, perl est▀ basado en un estilo de bloques como los del c
o awk, y fue ampliamente adoptado por su destreza en el procesado de texto
y no tener ninguna de las limitaciones de los otros lenguajes de script.

Visualizar el contenido de un archivo de texto en una ventana :
(http://r.i.elhacker.net/cache?url=http://mx.geocities.com/leorocko13/texto_en_ventana.JPG)

Código:
@echo off
nircmd clipboard readfile "texto.txt"
nircmd infobox "~$clipboard$" "texto.txt"
exit /b 0

Requiere Nircmd.exe

Listar un archivo de forma inversa :
Código:
P
o
r
t
a
l
h
a
c
k
e
r
.
n
e
t

Y que no lo devuelva en esta forma :
Código:
     16: t
      15: e
      14: n
      13: .
      12: r
      11: e
      10: k
       9: c
       8: a
       7: h
       6: l
       5: a
       4: t
       3: r
       2: o
       1:*P
Código:
@echo off
for /f "tokens=1" %%x in ('type texto.txt ^| find /v /c ""') do (set /a lineas=%%x)
set /a lineas-=1
for /l %%x in (%lineas%, -1, 1) do (
(
echo %%x,%%xl
echo e
) | edlin /b texto.txt | find /v "Final del archivo de entrada" | find /v "%%x,%%xl" | find /v "*e"
)
pause>nul
Segunda forma, la mejor:
Código
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1" %%_ in ('type "file.txt" ^| find /v /c ""') do (set "lineas=%%_";)
  4. set /a "contador=0"
  5. for /f "eol= tokens=* delims=" %%_ in (file.txt) do (
  6. set /a "contador+=1"
  7. set "linea!contador!=% style="color: #448888;">%_"
  8. )
  9. for /l %%_ in (%lineas%,-1,1) do (
  10. echo !linea% style="color: #448888;">%_!
  11. )
  12.  
Agregar una palabra al principio y al final de una linea en un archivo de texto :

Supongamos que tenemos el siguiente texto :
Código:
Leo
Laura
Lola
Lala
Código:
@echo off
for /f "tokens=*" %%x in ('type texto.txt') do (echo Antes %%x Despues) >> temp.txt
type "temp.txt"
del /f /q "temp.txt"
goto:eof
Y la salida :
Código:
Antes Leo Despues
Antes Laura Despues
Antes Lola Despues
Antes Lala Despues

Listar solo las palabras que tengan 3 caracteres de longitud en un archivo de texto :
Código:
type texto.txt | findstr "^...$"
Tip, por Tomi Salmi.

Informacion sobre los archivos de texto :  
Código:
assoc | find /i ".txt"
ftype | find /i "txtfile"


Caso practico :
[/size]
Supongamos que tenemos un archivo de texto así :
Código:
laasd
laasd
ladf
lagfh
laghj
lafgh
Start-of-data
Leonardo
Gutierrez
Ramirez
End-of-data
kljdas
dasd
lksñdf

Y solo queremos mostrar lo que esta entre :
Start-of-data y End-of-data

Código:
@echo off
for /f "tokens=1 delims=:" %%x in ('type "texto.txt" ^| findstr /n "Start-of-data"') do (set /a inicio=%%x)
for /f "tokens=1 delims=:" %%x in ('type "texto.txt" ^| findstr /n "End-of-data"') do (set /a fin=%%x)
set /a inicio+=1
set /a fin-=1
for /f "tokens=2 delims=:" %%x in ('
^(
echo %inicio%^,%fin%l
echo e
^) ^|edlin /b texto.txt^| find /v "*%inicio%,%fin%l"^|find /v "Final del archivo de entrada"^|find /v "*e"') do (
echo %%x
)

Guardar las lineas de un archivo de texto en lineas independientes :
[/b]
Código:
@echo off
setlocal enabledelayedexpansion
set contador=0
for /f "eol= tokens=* delims=" %%x in (file.txt) do (
set /a contador+=1
set linea!contador!=%%x
)
set linea

Meter la primera linea en una variable:
Código
  1. @echo off
  2. <"file.txt" set /p "primera_linea="
  3. set "primera_linea"

Pedir número de línea al usuario y mostrarla por pantalla:
Código:
@echo off
:code
set /p "linea=Linea : "
if not defined linea goto:code
set /a "_linea=0"
for /f "tokens=*" %%_ in ('type file.txt') do (
call:show %%_
)
goto:eof
:show
set /a "_linea+=1"
if %_linea%==%linea% echo %*
goto:eof

Caso práctico:
http://foro.elhacker.net/programacion_general/ayuda_con_bat_leer_archico-t268569.0.html;msg1314595#new (http://foro.elhacker.net/programacion_general/ayuda_con_bat_leer_archico-t268569.0.html;msg1314595#new)

Comparar dos archivos (file.txt y file2.txt) y mostrar el número de línea y la línea donde se da la diferencia.
Código
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /a "linea=0"
  4. for /f "tokens=1" %%g in (file.txt) do (
  5.   set /a "linea+=1"
  6.   set "_answer=%%g"
  7. for /f "tokens=1" %%k in (file2.txt)  do (if "%%g" equ "%%k" set "_answer=")
  8. if defined _answer (
  9. echo Diferencia(^s^) encontrada en la linea !linea! :  !REG3XP0!>"%%g"
  10. )
  11. )
  12. set /p "="
  13. exit /b 0;

Ejemplo de uso:
Código:
C:\>type file*

file.txt


Leo
Itzel
Darwin
Yareli
Michelito
Maurilio
p**a
file2.txt


Leo
Itzel
Darwin
Yareli
Michel
Maurilio

C:\>

Ejecución:
Código:
C:\>code
Diferencia(s) encontrada en la linea 5 :  "Michelito"
Diferencia(s) encontrada en la linea 7 :  "p**a"


C:\><

Buscar un archivo en todos los discos disponibles y eliminarlo:
El siguiente código encuentra las unidades de disco disponibles en el sistema, en seguida busca el archivo a eliminar, en este caso yo lo llamé "archivoloco.txt" sólo para ilustrar.

El archivo lo tengo en las siguientes rutas :

Código:
C:\>code
C:\Documents and Settings\Administrador\Escritorio\archivoloco.txt
C:\Documents and Settings\Administrador\Escritorio\Escuela\archivoloco.txt
D:\RECOVERY\archivoloco.txt
F:\problemas\archivoloco.txt
G:\psico\archivoloco.txt

C:\>

Se trata de eliminarlo.

Código
  1. @echo off
  2. rem Leo Gutierrez R.
  3. for %%i in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do (
  4. dir /b %%i:\ > nul 2>&1 && (
  5. for /f "tokens=*" %%_ in ('dir /b /s %%i:archivoloco.txt') do (
  6. del /f /q "%%_"
  7. )
  8. )
  9. )
  10. pause>nul
  11. exit /b 0

Y eso fue todo, si volviera a buscar los archivos en los distintos discos, esto obtendría:
Código:
C:\>lala
No se encuentra el archivo
No se encuentra el archivo
No se encuentra el archivo
No se encuentra el archivo

C:\>

Saludos.

Leer solo una parte de un fichero

http://foro.elhacker.net/scripting/leer_solo_una_parte_de_un_fichero_de_texto_iquestcomo-t296151.0.html (http://foro.elhacker.net/scripting/leer_solo_una_parte_de_un_fichero_de_texto_iquestcomo-t296151.0.html)

Añadir una línea al principio del archivo

http://foro.elhacker.net/scripting/comandoopcion_msdos_insertar_linea_en_archivo_txt_solucionado-t289992.0.html (http://foro.elhacker.net/scripting/comandoopcion_msdos_insertar_linea_en_archivo_txt_solucionado-t289992.0.html)

Modificar el valor de una columna
http://foro.elhacker.net/scripting/ayudacon_modificacion_de_archivo_de_texto-t294900.0.html (http://foro.elhacker.net/scripting/ayudacon_modificacion_de_archivo_de_texto-t294900.0.html)


http://foro.elhacker.net/scripting/modificar_archivos_de_texto_batch_perl-t293258.0.html (http://foro.elhacker.net/scripting/modificar_archivos_de_texto_batch_perl-t293258.0.html)

Contar renglones de archivo
http://foro.elhacker.net/scripting/contador_de_renglones_solucionado- (http://foro.elhacker.net/scripting/contador_de_renglones_solucionado-)t292853.0.html

Crear varios txt a patir de otro
http://foro.elhacker.net/scripting/batch_crear_varios_txt_a_partir_de_otro_txt_solucionado-t290418.0.html (http://foro.elhacker.net/scripting/batch_crear_varios_txt_a_partir_de_otro_txt_solucionado-t290418.0.html)

Reportar archivos encontrados[/b]]Reportar archivos encontrados (http://[b)
http://foro.elhacker.net/scripting/reporte_en_batch-t277835.0.html (http://foro.elhacker.net/scripting/reporte_en_batch-t277835.0.html)

Quitar fin de linea
http://foro.elhacker.net/scripting/ayuda_com_archivo_de_texto_por_favorsolucionado-t277953.0.html (http://foro.elhacker.net/scripting/ayuda_com_archivo_de_texto_por_favorsolucionado-t277953.0.html)


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: SmartGenius en 24 Enero 2009, 20:12
Muy bueno leonardo...Gracias por compartirlo  :D


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: vagosoft en 7 Julio 2009, 00:35
Excelente  ;-)
... justo lo que buscaba !  :silbar:


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: FranciskoAsdf en 7 Julio 2009, 04:27
gracias leonador, espero que me sirva para lo que quiero hacer con unos archivos de texto :D!!!!!

en muy buena hora posteaste la info :D!!!

gracias de nuevo ^^*!


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Yatch en 20 Julio 2009, 08:20
Hola Buenas me gusto mucho este post pero tengo una duda si tengo un txt

con lel siguiente texto

Código:
1234#
blablabalbalb
blablablabl
balblabl
#
456546#
blablabalbalb
blablablabl
balblabl
#
45646#
blablabalbalb
blablablabl
balblabl
#
46456#
blablabalbalb
blablablabl
balblabl
#

como puedo borrar la linea desde el numero asta el segundo delimitador # por ejemplo

45646#
blablabalbalb
blablablabl
balblabl
#




Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 8 Agosto 2009, 06:36
Aqui esta la solución:
Código
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1 delims=[]" %%_ in ('type "file.txt" ^| find /i /n "45646#"') do set "coincidencia=%%_"
  4. if not defined coincidencia (
  5. echo.No se encontro ninguna coincidencia "45646#"
  6. goto:eof
  7. )
  8. :: Meter lineas de archivo.
  9. set /a "contador=0"
  10. for /f "eol= tokens=* delims=" %%x in (file.txt) do (
  11. set /a "contador+=1"
  12. set linea!contador!=%% style="color: #448888;">x
  13. )
  14. for /l %%: in (%coincidencia%, 1, %contador%) do (
  15. if "!linea% style="color: #448888;">%:!"=="#" (
  16. set /a "coincidencia_final=%%:"
  17. goto:break
  18. )
  19. )
  20. :break
  21. if not defined coincidencia_final (
  22. echo.No se encontro ninguna coincidencia
  23. goto:eof
  24. )
  25. echo.Archivo normal:
  26. for /l %%: in (1,1, %contador%) do (echo %%: : !linea% style="color: #448888;">%:!)
  27. echo.Archivo modificado:
  28. for /l %%: in (1,1, %contador%) do (
  29. if %%: lss %coincidencia% (echo %%: : !linea% style="color: #448888;">%:!)
  30. if %%: gtr %coincidencia_final% (echo %%: !linea% style="color: #448888;">%:!)
  31. )
  32. pause>nul
  33. exit /b 0

Salida:

Código:
C:\>code.bat
Archivo normal:
1 : 1234#
2 : blablabalbalb
3 : blablablabl
4 : balblabl
5 : #
6 : 456546#
7 : blablabalbalb
8 : blablablabl
9 : balblabl
10 : #
11 : 45646#
12 : blablabalbalb
13 : blablablabl
14 : balblabl
15 : #
16 : 46456#
17 : blablabalbalb
18 : blablablabl
19 : balblabl
20 : #


Archivo modificado:
1 : 1234#
2 : blablabalbalb
3 : blablablabl
4 : balblabl
5 : #
6 : 456546#
7 : blablabalbalb
8 : blablablabl
9 : balblabl
10 : #
16 46456#
17 blablabalbalb
18 blablablabl
19 balblabl
20 #

C:\>

Modifica el script a tu conveniencia.

Aquí está la solución en PERL:
Código
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. $/ = '';
  5. if(!@ARGV)
  6. {
  7. print "perl pl.pl \"archivo-a-editar\"\n";
  8. exit(1);
  9. }
  10. while(<>)
  11. {
  12.        s/45646#.*?#\n//s;
  13.        print;
  14. }
Código:
leo@lein:~/Escritorio$ perl pl.pl file.txt
1234#
blablabalbalb
blablablabl
balblabl
#
456546#
blablabalbalb
blablablabl
balblabl
#
46456#
blablabalbalb
blablablabl
balblabl
#
leo@lein:~/Escritorio$


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: KamuiDNA en 13 Agosto 2009, 20:03
Hola buenos dias , tengo una duda, espero me puedan auxiliar, tengo el siguietne archivo es un TXT y tiene lo siguiente:

Código:
TOA5 CR200Series CR2xx v06 WX-SI-06_test.C 18422 Public
TIMESTAMP RECORD Vel_Viento Dir_Viento Temperatura Wind_Chill Heat_Index P_rocio Hum_Relativa Evto Pres_Bar Rad_Solar Precipitacion Bateria Latitud Longitud Altitud
TS RN Km/h º ºC ºC ºC ºC % mm/h mB W/m2 mm Volts

03/08/2009 10:58 41 3.599 43.06523 23.57434 27.37795 18.57707 13.77606 34.56199 0 793.016 0 0 12.67301 19.74977 88.70969 35



y deseo que me de la siguiente salida si es posible:


3.599
43.06523
23.57434
27.37795
18.57707
13.77606
34.56199
0
793.019
0


he intentado pero la verdad soy muy noob en cuanto a la programacion, espero puedan ayudarme, gracias de antemano.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 13 Agosto 2009, 20:35
Hola, en Batch podríamos hacer algo así.

Suponiendo que contamos con "file.txt", cuyo contenido es:
Código:
TOA5 CR200Series CR2xx v06 WX-SI-06_test.C 18422 Public
TIMESTAMP RECORD Vel_Viento Dir_Viento Temperatura Wind_Chill Heat_Index P_rocio Hum_Relativa Evto Pres_Bar Rad_Solar Precipitacion Bateria Latitud Longitud Altitud
TS RN Km/h º ºC ºC ºC ºC % mm/h mB W/m2 mm Volts

03/08/2009 10:58 41 3.599 43.06523 23.57434 27.37795 18.57707 13.77606 34.56199 0 793.016 0 0 12.67301 19.74977 88.70969 35

Y solo queremos mostrar los números así:
Código:
3.599
43.06523
23.57434
27.37795
18.57707
13.77606
34.56199
0
793.019
0
...
Código
  1. [code=dos]@echo off
  2. for /f "tokens=3*" %%a in ('type "file.txt" ^| find /i "%date:~-4%"') do set "variable=%%a %%b"
  3. for %%_ in (%variable%) do echo %%_
  4. set /p =
  5. exit /b 0
Salida:
Código:
C:\>code.bat
41
3.599
43.06523
23.57434
27.37795
18.57707
13.77606
34.56199
0
793.016
0
0
12.67301
19.74977
88.70969
35


C:\>

Edit:

He editado el código.[/code]


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: KamuiDNA en 13 Agosto 2009, 20:45
Gracias

En seguida lo pruebo y comento los resultados =D muchas gracias.!!!!!


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: KamuiDNA en 13 Agosto 2009, 20:52
Ya nada mas me queda una duda, lo que deseo hacer es crear un archivo XML  con los datos obtenidos en el programa que me ayudaron a hacer, es posible hacer esto desde batch , segun estaba viendo si es posible unicamente agrego el texto de mis etiquetas XML y guardo el archivo como XML,

La duda concreta que tengo es posible crear archivos con Batch en formato XML mediante el bloc de notas ?  solo tengo esa duda, si es posible para buscar la informacion necesaria para no abusar de su ayuda  =)

Muchas gracias el programa  si me dio la salida que esperaba ^^


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 13 Agosto 2009, 21:09
Aunque ya hayas encontrado solución, de todos modos te contesto.

Es posible trabajar con XML, pero es algo engorroso, pero si vas a volcar la salida del script que acabamos de hacer a un XML, podrías hacerlo a lo simple, así:

Editamos el script y lo dejamos asì:
code.bat:
Código
  1. @echo off
  2. for /f "tokens=3*" %%a in ('type "file.txt" ^| find /i "%date:~-4%"') do set "va
  3. riable=%%a %%b"
  4. for %%_ in (%variable%) do echo %%_
  5.  

Luego desde otro script, llamemosle "dudas.bat":
Código
  1. @echo off
  2. echo ^<ETIQUETA^> >> my_xml.xml
  3. call code.bat >> my_xml.xml
  4. echo ^</ETIQUETA^> >> my_xml.xml
  5.  
La salida de "my_xml.xml" sera esta:
Código:
C:\>type my_xml.xml
<ETIQUETA>
41
3.599
43.06523
23.57434
27.37795
18.57707
13.77606
34.56199
0
793.016
0
0
12.67301
19.74977
88.70969
35
</ETIQUETA>

C:\>

Para trabajar con XML te recomiendo PERL.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: KamuiDNA en 13 Agosto 2009, 21:25
Muchas gracias Leo , si estoy viendo que es un poco laborioso crear los XML con batch,  el unico detalle  es que cada linea de datos seria una etiqueta la salida que busco es la siguiente:

Código:

<?xml version="1.0" encoding="UTF-8"?>
<mexico>
<vel_viento>3.599</vel_viento>
<dir_viento>43.06523</dir_viento>
<temp>23.57434</temp>
<sens_term>27.37795</sens_term>
<ind_calor>18.57707</ind_calor>
<p_rocio>13.77606</p_rocio>
<humedad>34.56199</humedad>
<evto>0</evto>
<pres_barom>793.016</pres_barom>
<red_solar>0</red_solar>
<precipitacion>0</precipitacion>
</mexico>


Estaba viendo y para poder manipular cada dato tendria que asignarlo a una variable diferente para poderlo insertar en donde yo quisiera.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: KamuiDNA en 13 Agosto 2009, 23:46
Por fin me quedo el codigo como lo deseaba, estuve  viendo los ejemplos que pusieron y ahi encontre las respuestas a mis preguntas , obvio con la ayuda de Leo que me auxilio sin el no podria haber terminado mi proyecto, adjunto el codigo por si a alguien le sirve:

Código:
@echo off
for /f "tokens=3*" %%a in ('type "Cozumel_public.txt" ^| find /i "%date:~-4%"') do set "variable=%%a %%b"
for %%_ in (%variable%) do echo %%_

Aqui el segundo proceso para formatear los datos obtenidos en el primero en formato XML

Código:
@echo off
call Code.bat >> Temp.txt
del /F Cozumel.xml

setlocal enabledelayedexpansion
set contador=0
for /f "eol= tokens=* delims=" %%x in (Temp.txt) do (
set /a contador+=1
set linea!contador!=%%x
)
set linea


echo ^<?xml version="1.0" encoding="UTF-8"?> ^> >> Cozumel.xml
echo ^<cozumel^> >> Cozumel.xml
echo ^<vel_viento^>%linea2%^</vel_viento^> >> Cozumel.xml
echo ^<dir_viento^>%linea3%^</dir_viento^> >> Cozumel.xml
echo ^<temp^>%linea4%^</temp^> >> Cozumel.xml
echo ^<sens_term^>%linea5%^</sens_term^> >> Cozumel.xml
echo ^<ind_calor^>%linea6%^</ind_calor^> >> Cozumel.xml
echo ^<p_rocio^>%linea7%^</p_rocio^> >> Cozumel.xml
echo ^<humedad^>%linea8%^</humedad^> >> Cozumel.xml
echo ^<evto^>%linea9%^</evto^> >> Cozumel.xml
echo ^<pres_barom^>%linea10%^</pres_barom^> >> Cozumel.xml
echo ^<rad_solar^>%linea11%^</rad_solar^> >> Cozumel.xml
echo ^<precipitacion^>%linea12%^</precipitacion^> >> Cozumel.xml
echo ^</cozumel^> >> Cozumel.xml
del /F Temp.txt


Gracias por la ayuda =) espero a alguien le sirva.



Se me olvidaba mencionar son dos procesos el primero llamado Code y el segundo se llama Proceso , el que yo ejecuto es el segundo y este a su vez llama al primero.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Yatch en 16 Agosto 2009, 07:09
Código
  1. @echo off
  2. @title Borrador de Descripciones
  3.  
  4. :again
  5. cls
  6. echo ===============================
  7. echo == Borrador de Descripciones ==
  8. echo ===============================
  9. set /p desc_id=Enter ID:
  10. set file=desc.txt
  11.  
  12. setlocal enabledelayedexpansion
  13.  
  14. for /f "tokens=1 delims=[]" %%_ in ('type "%file%" ^| find /i /n "%desc_id%#"') do set "coincidencia=%%_"
  15. if not defined coincidencia (
  16. echo No se encontro ninguna coincidencia "%desc_id%#"
  17. goto end
  18. )
  19. :: Meter lineas de archivo.
  20. set /a "contador=0"
  21.  
  22. for /f "eol= tokens=* delims=" %%x in (%file%) do (
  23. set /a "contador+=1"
  24. set linea!contador!=%% style="color: #448888;">x
  25. )
  26.  
  27. for /l %%: in (%coincidencia%, 1, %contador%) do (
  28. if "!linea% style="color: #448888;">%:!"=="#" (
  29. set /a "coincidencia_final=%%:"
  30. goto:break
  31. )
  32. )
  33. :break
  34. if not defined coincidencia_final (
  35. echo No se encontro ninguna coincidencia
  36. goto end
  37. )
  38.  
  39. for /l %%: in (1,1, %contador%) do (
  40. if %%: lss %coincidencia% (echo !linea% style="color: #448888;">%:!>>desc2.txt)
  41. if %%: gtr %coincidencia_final% (echo !linea% style="color: #448888;">%:!>>desc2.txt)
  42. )
  43.  
  44. echo Descripcion: %desc_id% Borrada.
  45.  
  46. :end
  47. pause>nul
  48. goto again
  49. rem exit /b 0

Gracias men
Ahora como imprimo las lineas que elimine?


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: ovpaez en 24 Agosto 2009, 18:37
Hola perfectoo el codigo me refiere al de cambiar una frase por otra.. pero quisiera q dentro de ese mismo script poder seguir ejecutando otras instrucciones pero con el goto:eof se cierra el archivo y no se ejecuta lo demas como haria para q se siguiera ejecutando el script?? :-\ :-[ :silbar:


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 25 Agosto 2009, 05:54
Hola perfectoo el codigo me refiere al de cambiar una frase por otra.. pero quisiera q dentro de ese mismo script poder seguir ejecutando otras instrucciones pero con el goto:eof se cierra el archivo y no se ejecuta lo demas como haria para q se siguiera ejecutando el script?? :-\ :-[ :silbar:
Hola, podrías poner el código que estás intentando.

También pon un ejemplo del archivo de texto que estás usando.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: ovpaez en 26 Agosto 2009, 17:30
Código
  1. if %1'==' (set p1=usuario
  2. set p2=usu
  3. set p3=Plantilla.inf) else (set p1=%1&& set p2=%2&& set p3=%3)
  4. echo.>$
  5. for /f "tokens=1,* delims=]" %%A in ('"type %p3%|find /n /v """') do (
  6.     set "current=%%B"
  7.     if defined current (
  8. call :stng %p1% %p2%
  9.     ) else echo.>>$
  10. )
  11. type $>%p3%
  12. type %p3%
  13. :stng
  14. call set current=%%current:%1=%2%%
  15. echo %current%>>$
  16.  
  17. goto : EOF
  18.  
  19. Shutdown -r -t 00 restart




Despues del goto:eof no se sigue ejecutando la siguiente instruccion q sera reiniciar la maquina :(


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 27 Agosto 2009, 04:16
No se ejecuta por que está despues del GOTO:EOF

Goto:EOF, significa "ir al final del archivo", es decir, sale del archivo por lotes.

Prueba tu código así:
Código
  1. if %1'==' (
  2. set p1=usuario
  3. set p2=usu
  4. set p3=Plantilla.inf
  5. ) else (
  6. set p1=%1
  7. set p2=%2
  8. set p3=%3
  9. )
  10. echo.>$
  11. for /f "tokens=1,* delims=]" %%A in ('type %p3%|find /n /v ""') do (
  12.     set "current=%%B"
  13. )    
  14.     if defined current (
  15. call :stng %p1% %p2%
  16.     ) else echo.>>$
  17. )
  18. type $>%p3%
  19. type %p3%
  20. Shutdown -r -t 00 restart
  21. goto:eof
  22. :stng
  23. call set current=%%current:%1=%2%%
  24. echo %current%>>$
  25. goto : EOF
  26.  


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: ovpaez en 27 Agosto 2009, 15:48
 :-( no hac nada.. Ni reemplaza las palabras :( y mucho menos ejecuta la instrución.... Yo se lo que implica el goto: eof pero necesito que me permita seguir ejecutando instrucciones en el mismo script... help me!!


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 27 Agosto 2009, 17:30
Sí te ayudo, pero tu también a mi.

¿Qué palabras quieres reemplazar?
¿Cual es el contenido del archivo?


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: ovpaez en 28 Agosto 2009, 15:14
ok.. en el archivo de texto tengo la palabra usuario la cual se va a reemplazar dinamicamente con lo q traiga una variable... ya q  plantilla.inf es mi  archivo plano es una plantilla .. alli coloque usu en vez de la variable (pero es un ejemplo).. pero el codigo que te coloque hace el reemplazo de la variable perfectamente.. alli no tengo problemas.. pero necesito seguir ejecutando instrucciones.. pero primero necesito reemplazar ese archivo completamente y luego ejecutar ese archivo que estoy reemplazando ya que es una plantilla de politica se seguridad de windows... obvio todo dentro del mismo Script... Espero me haya sabido explicar... 


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 1 Septiembre 2009, 17:23
¿Y el contenido del archivo?
¿Como se yo donde debo reemplazar?... para eso es el contenido del archivo.


Título: Acciones sobre archivos de texto. [Batch]
Publicado por: ovpaez en 1 Septiembre 2009, 17:34
Código:
[Unicode]
Unicode=yes
[Version]
signature="$CHICAGO$"
Revision=
[Event Audit]
[Registry Values]
MACHINE\SOFTWARE\policies\Microsoft\windows NT\DCOM\MachineAccessRestriction=1,"O:BAG:BAD:(A;;CCDC;;;AN)(A;;CCDCLC;;;WD)(A;;CCDCLC;;;usuario)"
MACHINE\SOFTWARE\policies\Microsoft\windows NT\DCOM\MachineLaunchRestriction=1,"O:BAG:BAD:(A;;CCDC;;;AN)(A;;CCDCLC;;;WD)(A;;CCDCLC;;;usuario)"
[Privilege Rights]
SeSecurityPrivilege = *usuario
[File Security]
"%SystemDrive%\DOCS",0,"D:PAR(A;OICI;FA;;;BA)(A;OICIIO;FA;;;CO)(A;OICI;0x1301bf;;;usuario)(A;OICI;FA;;;SY)(A;OICI;0x1200a9;;;BU)"







Ese es el archivo a reemplazar.. y la palabra usuario es la q se va a reemplazar por usu como te puse el codigo anteriormente...

pero despues de reemplazar... desde del eof se cierra y no ejecuta otra instruccion la solucion fue hacer dos .bat pero es demasiado ineficiente se q se puede hacer en el mismo script eso creo!!?????





Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 2 Septiembre 2009, 05:12
Mira, si es que he entendido lo que quieres hacer, pues es fácil.

Lo explicaré:

Suponiendo que queremos cambiar una linea en el archivo "file.txt" (Esto lo modificas a tu gusto):
Código:
C:\>type "FILE.TXT"
[Unicode]
Unicode=yes
[Version]
signature="$CHICAGO$"
Revision=
[Event Audit]
[Registry Values]
MACHINE\SOFTWARE\policies\Microsoft\windows NT\DCOM\MachineAccessRestriction=1,"
O:BAG:BAD:(A;;CCDC;;;AN)(A;;CCDCLC;;;WD)(A;;CCDCLC;;;usuario)"
MACHINE\SOFTWARE\policies\Microsoft\windows NT\DCOM\MachineLaunchRestriction=1,"
O:BAG:BAD:(A;;CCDC;;;AN)(A;;CCDCLC;;;WD)(A;;CCDCLC;;;usuario)"
[Privilege Rights]
SeSecurityPrivilege = Este es mi texto
[File Security]
"%SystemDrive%\DOCS",0,"D:PAR(A;OICI;FA;;;BA)(A;OICIIO;FA;;;CO)(A;OICI;0x1301bf;
;;usuario)(A;OICI;FA;;;SY)(A;OICI;0x1200a9;;;BU)"

C:\>

Ejecutamos este codigo:
Código
  1. @echo off
  2. for /f "tokens=1 delims=:" %%_ in ('type "file.txt" ^| findstr /r /n "^SeSecurityPrivilege"') do (
  3. set "linea=%%_"
  4. )
  5. if not defined linea (
  6. echo No hay coincidencia.
  7. echo El programa cerrara ahora.
  8. set /p =
  9. exit /b 1
  10. )
  11. set "contenido=Este es mi texto" // Esto es por lo que se cambiara
  12. echo Linea a editar : %linea%
  13. echo Se editara por : SeSecurityPrivilege = %contenido%
  14. (
  15. echo %linea%
  16. echo SeSecurityPrivilege = %contenido%
  17. ) | edlin /b file.txt > nul 2>&1
  18. for /l %%_ in (1,1,3) do echo.
  19. type "file.txt"
  20. set /p =

El codigo buscara la linea a editar y la cambiara por esto:
Código:
echo SeSecurityPrivilege = %contenido%

Despues de ejecutar el codigo:

C:\>code.bat
Linea a editar : 11
Se editara por : SeSecurityPrivilege = Este es mi texto

Código:
[Unicode]
Unicode=yes
[Version]
signature="$CHICAGO$"
Revision=
[Event Audit]
[Registry Values]
MACHINE\SOFTWARE\policies\Microsoft\windows NT\DCOM\MachineAccessRestriction=1,"
O:BAG:BAD:(A;;CCDC;;;AN)(A;;CCDCLC;;;WD)(A;;CCDCLC;;;usuario)"
MACHINE\SOFTWARE\policies\Microsoft\windows NT\DCOM\MachineLaunchRestriction=1,"
O:BAG:BAD:(A;;CCDC;;;AN)(A;;CCDCLC;;;WD)(A;;CCDCLC;;;usuario)"
[Privilege Rights]
SeSecurityPrivilege = Este es mi texto
[File Security]
"%SystemDrive%\DOCS",0,"D:PAR(A;OICI;FA;;;BA)(A;OICIIO;FA;;;CO)(A;OICI;0x1301bf;
;;usuario)(A;OICI;FA;;;SY)(A;OICI;0x1200a9;;;BU)"


C:\>
Saludos.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: ovpaez en 2 Septiembre 2009, 18:04
Q pena  :-[

Bueno Creo que entendi el codigo que me diste.. Peroooo si te diste cuenta en el archivo hay varios sitios donde se encuentra la palabra usuario... Y lo de reemplazar las palabras que quiero en el archivo de texto ya eso lo programe este es el codigo
Código
  1. if %1'==' (set p1=usuario
  2. set p2=%varusuario%
  3. set p3=Plantilla.inf) else (set p1=%1&& set p2=%2&& set p3=%3)
  4. echo.>$
  5. for /f "tokens=1,* delims=]" %%A in ('"type %p3%|find /n /v """') do (
  6.     set "current=%%B"
  7.     if defined current (
  8. call :stng %p1% %p2%
  9.     ) else echo.>>$
  10. )
  11. type $>%p3%
  12. type %p3%
  13. :stng
  14. call set current=%%current:%1=%2%%
  15. echo %current%>>$
  16.  
  17. goto : EOF
  18.  



Ese codigo me reemplaza en el archivos todas las palabras usuario por usu, por el SID o variable que yo desee... Ese codigo va dentro de un bat donde se encuentran otras instrucciones...
Código:
if %1'==' (set p1=usuario
set p2=%varusuario%
set p3=Plantilla.inf) else (set p1=%1&& set p2=%2&& set p3=%3)
 echo.>$
 for /f "tokens=1,* delims=]" %%A in ('"type %p3%|find /n /v """') do (
     set "current=%%B"
     if defined current (
call :stng %p1% %p2%
     ) else echo.>>$
 )
 type $>%p3%
 type %p3%
 :stng
 call set current=%%current:%1=%2%%
 echo %current%>>$

goto : EOF

secedit /configure /cfg plantilla.inf /db secsetup.sdb /verbose

:: ------- Firewall-----
netsh.exe firewall set service type=REMOTEADMIN mode=ENABLE scope=ALL    
netsh.exe firewall show state

echo Configure los permisos del WMI con el usuario %filecontent% y luego presione Enter
pause

net stop winmgmt
net start winmgmt

Shutdown -r -t 00

Este es el bat

Como ya te he dicho lo hace todo pero hasta el eof ya la siguientes instrucciones no las realiza... y necesito q se ejecute todo :( y todo se debe realizar en un Script  para darle click y ya









Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: ovpaez en 14 Septiembre 2009, 16:37
Se cerro el tema ??? :huh:


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 14 Septiembre 2009, 16:45
No, claro que no, solo se olvido tu duda.

Una pregunta, ¿aceptarías una solución en Perl?, por que no tengo acceso a sistemas con Windows.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: danibcn en 17 Octubre 2009, 16:11
Buenos tardes! :D

Me gustaría saber como ejecutar un bat o si hay un programa ya para modificar unos archivos de texto para eliminar ciertas palabras o lineas y que te lo guarde sin crear archivos a parte.

por ejemplo tengo 100 txt

y en todos quiero eliminar la palabra 'señor', reemplazar 'río' por 'lago' y cuando encuentre 'mar' eliminar desde 'mar' hasta la última linea o poder eliminar 6 ultimas lineas ;)

Quien me puede echar una mano?


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: 0x0309 en 17 Octubre 2009, 16:38
mira, lo mejor es que utilices un programa que te haga el trabajo, y simplemente lo llamas con parámetros.
Hay uno muy bueno que se llama gsar.exe

Código:
http://gnuwin32.sourceforge.net/packages/gsar.htm

Esta es su ayuda:

Código:
gsar, ver 1.21 -- Copyright (C) 1992-2008 Tormod Tjaberg & Hans Peter Verne

Usage: gsar [options] [infile(s)] [outfile]
Options are:
-s<string> Search string
-r[string] Replace string. Use '-r' to delete the search string from the file
-i         Ignore case difference when comparing strings
-B         just display search & replace Buffers
-f         Force overwrite of an existing output file
-o         Overwrite the existing input file
-c[n]      show textual Context of match, 'n' is number of bytes in context
-x[n]      show context as a heX dump, 'n' is number of bytes in context
-b         display Byte offsets of matches in file
-l         only List filespec and number of matches (default)
-h         suppress display of filespec when displaying context or offsets
-du        convert a DOS ASCII file to UNIX (strips carriage return)
-ud        convert a UNIX ASCII file to DOS (adds carriage return)
-F         'Filter' mode, input from stdin and eventual output to stdout
-G         display the GNU General Public Licence

Ctrl characters may be entered by using a ':' in the string followed by the
ASCII value of the character. The value is entered using ':' followed by three
decimal digits or ':x' followed by two hex numbers. To enter ':' use '::'

Por ejemplo yo tengo el siguiente script para modificar rápidamente el boot.ini y activar dep para todos los programas y servicios. Esto normalmente, se hace yendo a Propiedades de pc ... y varios clics. En cambio yo automaticé el proceso. Activar dep para todos los programas es para aumentar la seguridad del equipo y que no te vulneren el sistema operativo con drivers.

Código:
@echo off
reg.exe delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /f >nul 2>&1
(set file=%SystemDrive%\boot.ini)
attrib.exe -a -s -h -r "%file%" >nul 2>&1
gsar.exe -i -o -sNoExecute=OptIn -rNoExecute=OptOut "%file%" >nul 2>&1
if not errorlevel 1 (
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\NoExecuteState" /v LastNoExecuteRadioButtonState /t REG_DWORD /d 13013 /f >nul 2>&1
)
attrib.exe +a +s +h +r "%file%" >nul 2>&1

Lo que hace mi código es reemplazar en el boot.ini:
NoExecute=OptIn
por
NoExecute=OptOut

Si es que existe el texto OptIn, sino devuelve errorlevel 1 que significa que no reemplazo nada porque no encontró el texto de entrada en el archivo.

Yo te recomiendo este programa porque lo he probado y funciona bien.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: P3YOX en 28 Octubre 2009, 05:32
BUENAS  Soy bastante novato  En esto del batch pero  copiando y pagando analisando he conseguido resultados  pero aún asi no me alcansa la suerte es por eso que necesito tu ayuda  ^^   tengo un batch  pesca un archivo de texto y lo  ingresa a una variante  y  ese contenido  lo transformo  sin ningun problema  EL  PROBLEMA SE PRODUCE  que no puedo encontrar un codigo queme tome  todo  el contenido del texto y me lo ingrese a mi  variante solo conseguí uno  que me  tome la primera linea  no todo el contenido del txt  esto es lo  que tengo

Citar
echo.
for /f  %%a in (nuevo.txt) do (
set var=%%a
goto next)
:next
echo %var:~0%
set var=%var:~0%
etc
etc...

Y tambien la posivilidad d eke  me  intregre  varios archivos de  texto con  nombrs en comun ala variante  como por ejemplo  un  *00.txt
de antemanos gracias


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: dazofeifa en 26 Noviembre 2009, 21:59
Hola, no encontré algo parecido a lo que ocupo: requiero tomar un archivo de texto generado por un Backup y extraer de él una parte de texto de una las lineas, para luego tomar esa parte del texto para realizar otra acción, específicamente, es el nombre y ruta de los archivos que no se pudieron respaldar porque están en uso, para luego con este nombre de archivo y su ruta, llamar a otro tipo de backup que funciona aunque los archivos estén bloqueados. He logrado extraer del log la línea donde muestra el error (con for y findstr y asignando valor a variable) pero, no se cómo sacar de ella sólo lo que necesito.  Eje:
La linea extraída es:
Código:
2009/11/23 14:02:15 ERROR 33 (0x00000021) Copying File D:\Respaldo\out\res.pst
yo solo ocupo : D:\Respaldo\out\res.pst (este dato es variable de acuerdo al archivo que esté bloqueado).

Agradezco su ayuda.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 27 Noviembre 2009, 02:53
¿Qué código has utilizado para obtener esta línea?:
Código:
2009/11/23 14:02:15 ERROR 33 (0x00000021) Copying File D:\Respaldo\out\res.pst


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: flony en 27 Noviembre 2009, 13:25
dazofeifa deberias usar la extraccion de caracteres es
Citar
nos permita obtener "trozos" de variables llamados subcadenas, existen varias formas para ello, siendo la principal:
Código:
Código:
SET VariableResultado=%VariableOriginal:~m,n%

Almacena en la VariableResult ado la subcadena que existen en la VariableOrigin al desde la posición "m" durante "n" caracteres.



Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 27 Noviembre 2009, 17:18
En cualquier caso yo buscaría la solución en Perl, mira este ejemplo:

Código
  1. #!/usr/bin/perl
  2. use warnings;
  3. use strict;
  4. open(FILE, q[<], "file.txt") or die("No se pudo acceder al archivo. $!\n");
  5. while(<FILE>)
  6. {
  7. if(/:/)
  8. {
  9. print(split(/.*File\s/, $_));
  10. }
  11. }
  12. exit(0);
  13.  

Tengo este archivo de texto similar a lo que tu obtienes:
Código:
2009/11/23 14:02:15 ERROR 33 (0x00000021) Copying File D:\Respaldo\out\res.pst
2009/11/23 14:02:15 ERROR 33 (0x00000021) Copying File D:\Respaldo\out\res.pst
2009/11/23 14:02:15 ERROR 33 (0x00000021) Copying File D:\Respaldo\out\res.pst
2009/11/23 14:02:15 ERROR 33 (0x00000021) Copying File D:\Respaldo\out\res.pst
2009/11/23 14:02:15 ERROR 33 (0x00000021) Copying File D:\Respaldo\out\res.pst
2009/11/23 14:02:15 ERROR 33 (0x00000021) Copying File D:\Ruta espacios\etc jkalaksd\file.algo

Y lo que obtengo al ejecutar el script:

Código:
leo@lein:~/Escritorio$ perl pl.pl
D:\Respaldo\out\res.pst
D:\Respaldo\out\res.pst
D:\Respaldo\out\res.pst
D:\Respaldo\out\res.pst
D:\Respaldo\out\res.pst
D:\Ruta espacios\etc jkalaksd\file.algo
leo@lein:~/Escritorio$


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: << Lucas, ¿quién más? >> en 3 Diciembre 2009, 20:17
Buena información, justo que me estaba olvidando un poco de todo esto. Me viene al pelo en un trabajo que debo presentar
Saludos


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: carlosguay en 8 Diciembre 2009, 21:32
Ya que mi problema es de archivos de texto, lo pongo aqui por no abrir otro hilo.

Primero decir que gracias a este hilo, e podido solucionar muchas de las cosas que estoy haciendo com mis archivos, gracias a leo por este aporte.

Vereis tengo un problema que no se como solucionar con este archivo.

 
Citar
ad 55 6b b9   ad b6 ef ba   05 bc 36 9d   3c 86 43 38
  bf cf 2f bf   4a 8b d7 09   4d 02 41 00   bc c7 88 fd 
  f7 19 be aa   03 c6 18 ee   b3 2c b9 b8   73 89 0b 72 
  06 57 8b c9   77 b3 79 c3   4f 5f db 60   e7 89 bd 55 
  06 90 79 12   f6 84 67 b1   84 c4 dc 22   5b 3a 7f 45 
  ac 5d 14 7e   1d c6 b9 65   8f 6c 37 36| .].~...e.l76

LINEA CON TEXTO



Este archivo, en la parte de la derecha, lleva codigo acssi, que como veis no tengo problema en quitarlo, pero ya veis que en el penultimo renglon ya que la parte de hex no llega hasta el final, pues me deja parte del acssi.

Os pondria de las formas que e intentado quitar la ultima linea y la parte de acsii, pero ya se me an olvidado, xd, siempre consigo esto.


Citar

ad 55 6b b9 ad b6 ef ba 05 bc 36 9d 3c 86 43 38
bf cf 2f bf 4a 8b d7 09 4d 02 41 00 bc c7 88 fd
f7 19 be aa 03 c6 18 ee b3 2c b9 b8 73 89 0b 72
06 57 8b c9 77 b3 79 c3 4f 5f db 60 e7 89 bd 55
06 90 79 12 f6 84 67 b1 84 c4 dc 22 5b 3a 7f 45



Como veis no solo borro la ultima linea y la parte de acsii, sino que tambien borro la linea completa y se seguro que es por |, toma como ultima linea esa y eso es lo que pasa.

Pues si alquien me puede ayudar, me haria un gran favor.

saludos




Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: pmabres en 14 Diciembre 2009, 14:41
Buenas... estoy en el trabajo intentando hacer un script para insertar datos desde archivos .dbf en una base de datos oracle... desde esos dbf puedo generar dos archivos .sql (uno que trae la creacion de tablas y otro que trae los inserts a hacer)... el problema que tengo ahora es que los insert deberian llevar el nombre de la tabla luego de la instruccion "insert into"... pero no hay nada. Casualmente el nombre de cada tabla es el nombre del archivo en donde se encuentra cada insert pero sin la extension .sql
mi pregunta es...
como hago para poner el nombre del archivo mismo en el que esta cada insert, luego de cada instruccion insert into


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: pmabres en 14 Diciembre 2009, 17:12
bueno pude hacer lo que queria pero lo que no puedo hacer ahora es cambiar el texto que quiero reemplazar por el texto que quiero reemplazar + una variable "que toma el nombre del archivo"

aca esta mi codigo....
Código:

@echo off
setlocal enabledelayedexpansion
for /f "tokens=* delims=" %%x in ('type C:\MB\DATOS\MB\insert\*.sql') do (
for %%p in (C:\MB\DATOS\MB\Insert\*.sql) do (
set nombre=%%~np
set linea=%%x
set linea=!linea:INTO=INTO %nombre%!
call :show !linea!
))
goto:eof
:show
echo %nombre%
pause
echo %* >> C:\MB\DATOS\MB\insert\%nombre%.sql
goto:eof



Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: pmabres en 14 Diciembre 2009, 19:56
Código:
@echo off
setlocal enabledelayedexpansion
for /f "tokens=* delims=" %%x in ('type C:\MB\DATOS\MB\insert\final\*.sql') do (
for %%p in (C:\MB\DATOS\MB\Insert\final\*.sql) do (
set nombre=%%~np
set linea=%%x
set linea=!linea:INSERT INTO=INSERT INTO TMP_%%~np!
call :show !linea!
))
goto:eof
:show
echo %* >> C:\MB\DATOS\MB\insert\%nombre%.sql
goto:eof
con esto estaria solucionado el tema del nombre del archivo....

el tema es que inserta dos veces los datos en el mismo file... no saben como peudo hacer para solucionar esto?

ya se que hace dos veces el for, pero no encuentro la manera de sacar el nombre del archivo actual, y de usar el type para meter los datos en una variable


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: pmabres en 14 Diciembre 2009, 22:32
pude solucionarlo!... un poco rústico pero pude jeje... dejo el codigo por las dudas

Código:
@echo off
setlocal enabledelayedexpansion
for %%p in (C:\MB\DATOS\MB\Insert\orig\*.sql) do (
set nombre=%%~np
type %%~fp > temp.txt
for /f "tokens=* delims=" %%x in ('type temp.txt') do (
set linea=%%x
set linea=!linea:INSERT INTO=INSERT INTO TMP_%%~np!
call :show !linea!
))
goto:eof
:show
echo %* >> C:\MB\DATOS\MB\insert\temp\%nombre%.sql
goto:eof


lo que hice fue crear un archivo temporal, que luego se borrará


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: geoclima en 7 Marzo 2010, 15:09
hola

he estado consultando el las distintas respuesta pero sigo teniendo un problema cuando intento crear un archivo. Os cuento.

Yo tengo un archivo XML llamado p11xand1.xml:
Código:
<root id="and">
<elaborado>2010-03-06T06:00:00</elaborado>
<validez_ini>2010-03-06T06:00:00</validez_ini>
<validez_fin>2010-03-07T00:00:00</validez_fin>
<actualizacion></actualizacion>
<prediccion>
<fenom_sign>
<p>
PRECIPITACIONES QUE PODRAN SER PERSISTENTES, LOCALMENTE FUERTES Y<br/>
OCASIONALMENTE ACOMPANADAS DE TORMENTAS EN EL TERCIO OCCIDENTAL Y<br/>
EL AREA DEL ESTRECHO DURANTE LA MANANA. VIENTOS FUERTES DE<br/>
COMPONENTE ESTE EN CEUTA Y EL LITORAL MEDITERRANEO, DONDE HABRA<br/>
RACHAS DE MUY FUERTES.
</p>
<p>
<br/>
</p>
</fenom_sign>
<txt_prediccion>
<p>
MUY NUBOSO O CUBIERTO CON PRECIPITACIONES MODERADAS, MAS<br/>
FRECUENTES E INTENSAS EN EL TERCIO OCCIDENTAL Y AREA DEL ESTRECHO,<br/>
DONDE PODRAN SER PERSISTENTES, LOCALMENTE FUERTES E IR ACOMPANADAS<br/>
DE TORMENTAS DURANTE LA MANANA, DISMINUYENDO LA INTENSIDAD POR LA<br/>
TARDE. LA COTA DE NIEVE SE SITUARA ALREDEDOR DE 1300 METROS EN LA<br/>
MITAD ORIENTAL.TEMPERATURAS EN LIGERO A MODERADO DESCENSO, MAS<br/>
ACUSADO EN LA MITAD OCCIDENTAL. VIENTOS DEL SUDESTE, FLOJOS A<br/>
MODERADOS EN EL INTERIOR Y MODERADOS A FUERTES EN EL LITORAL<br/>
ATLANTICO Y ZONAS ALTAS DEL INTERIOR, SIENDO FUERTES DEL ESTE EN<br/>
EL LITORAL MEDITERRANEO, DONDE HABRA RACHAS DE MUY FUERTE, MELILLA<br/>
Y CEUTA. LEVANTE MODERADO A FUERTE EN EL ESTRECHO.
</p>
</txt_prediccion>
</prediccion>
</root>

este archivo no tiene la cabecera para la transformación xsl y con un bat añado la cabecera que tengo en otro archivo

el archivo BAT
Código:
@echo off
(
ECHO 1d
ECHO E
) | EDLIN /B p11xand1.xml > nul 1>&0
type prevision.add > p11xand1.tmp
type p11xand1.xml >> p11xand1.tmp
move /y p11xand1.tmp p11xand1.xml
del p11xand1.bak

coge la cabecera del archivo prevision.add
Código:
<?xml version="1.0" encoding="ISO-8859-15" ?>
<?xml-stylesheet type="text/xsl" href="prevision.xsl"?>
y lo uno todo en el archivo original obteniendo al final un archivo con el mismo nombre p11xand1.xml con el contenido:
Código:
<?xml version="1.0" encoding="ISO-8859-15" ?>
<?xml-stylesheet type="text/xsl" href="prevision.xsl"?>
<root id="and">
<elaborado>2010-03-06T06:00:00</elaborado>
<validez_ini>2010-03-06T06:00:00</validez_ini>
<validez_fin>2010-03-07T00:00:00</validez_fin>
<actualizacion></actualizacion>
<prediccion>
<fenom_sign>
<p>
PRECIPITACIONES QUE PODRAN SER PERSISTENTES, LOCALMENTE FUERTES Y<br/>
OCASIONALMENTE ACOMPANADAS DE TORMENTAS EN EL TERCIO OCCIDENTAL Y<br/>
EL AREA DEL ESTRECHO DURANTE LA MANANA. VIENTOS FUERTES DE<br/>
COMPONENTE ESTE EN CEUTA Y EL LITORAL MEDITERRANEO, DONDE HABRA<br/>
RACHAS DE MUY FUERTES.
</p>
<p>
<br/>
</p>
</fenom_sign>
<txt_prediccion>
<p>
MUY NUBOSO O CUBIERTO CON PRECIPITACIONES MODERADAS, MAS<br/>
FRECUENTES E INTENSAS EN EL TERCIO OCCIDENTAL Y AREA DEL ESTRECHO,<br/>
DONDE PODRAN SER PERSISTENTES, LOCALMENTE FUERTES E IR ACOMPANADAS<br/>
DE TORMENTAS DURANTE LA MANANA, DISMINUYENDO LA INTENSIDAD POR LA<br/>
TARDE. LA COTA DE NIEVE SE SITUARA ALREDEDOR DE 1300 METROS EN LA<br/>
MITAD ORIENTAL.TEMPERATURAS EN LIGERO A MODERADO DESCENSO, MAS<br/>
ACUSADO EN LA MITAD OCCIDENTAL. VIENTOS DEL SUDESTE, FLOJOS A<br/>
MODERADOS EN EL INTERIOR Y MODERADOS A FUERTES EN EL LITORAL<br/>
ATLANTICO Y ZONAS ALTAS DEL INTERIOR, SIENDO FUERTES DEL ESTE EN<br/>
EL LITORAL MEDITERRANEO, DONDE HABRA RACHAS DE MUY FUERTE, MELILLA<br/>
Y CEUTA. LEVANTE MODERADO A FUERTE EN EL ESTRECHO.
</p>
</txt_prediccion>
</prediccion>
</root>
el problema.... que cuando se crea el archivo combinado aparece un espacio al final del archivo, detrás de </root> de modo que el navegador web no lo abre. Como puedo hacer este proceso (en bat preferiblemente) y que el archivo final se pueda abrir, es decir que después de </root> no haya ningun espacio?

Muchas gracias!!!!! de antemano!


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 7 Marzo 2010, 17:09
Podrías detectar la línea que quieres corregir, meterla en una variable y editarla con EDLIN.

O podrías usar extracción de caracteres para eso.
En la noche veo si tengo acceso a una máquina con Windows y te ayudo.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: geoclima en 7 Marzo 2010, 17:27
Hola! aquí está el problema! cuando se unen los dos archivos aparecen unos espacios en blanco al final y esto hace que el archivo xml no se pueda abrir. Esperaré tu respuesta! Gracias!!


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 7 Marzo 2010, 17:31
Ponme el archivo ya creado con el problema(los espacios esos que comentas).


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: geoclima en 7 Marzo 2010, 18:03
Aquí tienes los archivos:

el archivo original es p11xand1.xml

http://www.dalmaubover.org/meteorol/p11xand1.xml

además hay el archivo prediccion.add que contiene la cabecera que se le tiene que añadir al xml

Esto es porque para visualizarlos utilizo la plantilla prevision.xsl

http://www.dalmaubover.org/meteorol/prevision.xsl

Para unirlos tengo este archivo bat "cabecera.bat" que primero borra la primera linea de p11xand1.xml y luego escribe en de nuevo el archivo poniendo primero el texto de prediccion.add y luego el otro archivo sin la primera linea. El archivo final se llama p11xand1f.xml.

http://www.dalmaubover.org/meteorol/cabecera.bat
http://www.dalmaubover.org/meteorol/prediccion.add

http://www.dalmaubover.org/meteorol/p11xand1f.xml

Pero como puedes comprovar el archivo final no se puede abrir pues al final del documento hay unos espacios en blanco que no dejan bien formado el archivo xml y por lo tanto no se puede abrir.


¿Sería muy complicado hacer este mismo proceso con Perl??


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: geoclima en 8 Marzo 2010, 22:09
Hola Leo,

subí los archivos a mi servidor para que puedas chequearlos. Una pregunta.... como seria el mismo proceso en PERL, es decir

unir el contenido del archivo prediccion.add y p11xand1.xml para obtener un tercer archivo que se pueda abrir sin problema en el navegador?

ALBERT


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 9 Marzo 2010, 00:00
Es que no te pido que subas todos los archivos y demás, solo que me pongas el archivo aquí mismo, pegalo y etiquetalo y hazme evidente el error que tiene, para poder tratarlo.

Así me lo complicas mucho.

A simple vista se nota que el problema lo deja edlin al editar, deja un caracter al final de las líneas.

Podríamos usar sed(no está en Windows, hay que descargarlo) para eliminar dicha línea.
Código
  1. @echo off
  2. :: Conseguir el numero de lineas:
  3. for /f "tokens=1" %%_ in ('type "shit.txt" ^| find /v /c ""') do (set /a n_lines="%%_");
  4. :: Eliminar la ultima linea:
  5. sed %n_lines%d "shit.txt"

Claro que necesitas a sed.
El archivo "shit.txt" lo cambias por tu archivo a modificar.

O incluso más facil:
Código:
type "file.txt" | sed $d


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: M_A_R_T_I_N en 12 Marzo 2010, 19:38
Hola, la verdad que me fue muy util, pero tengo un tema que no pude resolver:

Quiero modificar una linea que empieza con < y el bat se me queda diciendo que no esperaba <

Ej:

Código:
111
222
333

y quiero que quede:

Código:
111
<span style="font-size: 10pt; color: blue; font-f...........
333

Estoy usando:

Código:
@echo off
(
echo 'aca pongo la linea que modifico
echo "   <span style="font-size: 10pt; color: blue; font-f.......
echo w
echo e
) | edlin /b c:\mail\prepos.htm

Si le pongo comillas me lo modifica, pero cuando abro el htm me muestra las comillas, se podran sacar de alguna manera? Una queda al principio de la linea y la otra al final.

El script anda perfecto pero se queda con el signo <

Desde ya muchas gracias, es el primer mensaje que escribo si algo esta mal en la redecion del mensaje avisenme.

Muchas Gracias.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: xassiz_ en 14 Marzo 2010, 14:28
Añade "^" antes del carácter.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 14 Marzo 2010, 17:09
Añade "^" antes del carácter.

Para EDLIN no es válido.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: M_A_R_T_I_N en 14 Marzo 2010, 23:01
Añade "^" antes del carácter.

Para EDLIN no es válido.

Hola, abria alguna manera de hacerlo o bien de borrar las comillas despues de reemplazado el texto?
Muchas Gracias.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: wajagaum en 18 Marzo 2010, 18:25
ho la tengo un archio .qrp lo edito con notepad. quisiera saber si con el batch yo puedo mostrar un nuemro que esta dentro del archivo y  pedir un nuevo nuemro en pantalla y el archivo bat busque dentro del archivo .qrp los que hayan y reemplazarlo por el pedido en pantalla.

texto:

Código:
Begin Column
   FieldName = "Promedio"
   DrillDownFieldName = ""
   DrillDownReportName = ""
   StoreIDFieldName = ""
   Title = "Promedio"
   VBDataType = vbDouble
   Formula = "SUM(TransactionEntry.Quantity)/3"
   ColHidden = False
   ColNotDisplayable = False
   FilterDisabled = False
   ColWidth = 990
   GroupMethod = groupmethodNone
   ColFormat = "#"
   ColAlignment = flexAlignLeftCenter
End Column

Begin Column
   FieldName = "VtaPromedio"
   DrillDownFieldName = ""
   DrillDownReportName = ""
   StoreIDFieldName = ""
   Title = "Venta Prom"
   VBDataType = vbCurrency
   Formula = "SUM(TransactionEntry.Price * (TransactionEntry.Quantity/3))"
   ColHidden = False
   ColNotDisplayable = False
   FilterDisabled = False
   ColWidth = 1425
   GroupMethod = groupmethodSum
   ColFormat = ""
End Column



y quiero mestrar "/3" y pedir otro numero por ejemplo "/n" y reemplazarlo.

te agradecia mucho tu ayuda.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 18 Marzo 2010, 23:39
Añade "^" antes del carácter.

Para EDLIN no es válido.

Hola, abria alguna manera de hacerlo o bien de borrar las comillas despues de reemplazado el texto?
Muchas Gracias.

Con edlin vas a seguir teniendo problemas.

Así que te recomiendo sed para Windows, con una expresión regular bastaría.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 19 Marzo 2010, 00:41
@wajagaum

¿Cambiar estas líneas?

Código:
   Formula = "SUM(TransactionEntry.Quantity)/3"
   Formula = "SUM(TransactionEntry.Price * (TransactionEntry.Quantity/3))"



Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 19 Marzo 2010, 04:00
Si es lo que querías, te tengo esta respuesta:

Supongamos que tenemos el archivo siguiente(yo lo llamé "file.txt":

Código:
Begin Column
   FieldName = "Promedio"
   DrillDownFieldName = ""
   DrillDownReportName = ""
   StoreIDFieldName = ""
   Title = "Promedio"
   VBDataType = vbDouble
   Formula = "SUM(TransactionEntry.Quantity)/3"
   ColHidden = False
   ColNotDisplayable = False
   FilterDisabled = False
   ColWidth = 990
   GroupMethod = groupmethodNone
   ColFormat = "#"
   ColAlignment = flexAlignLeftCenter
End Column

Begin Column
   FieldName = "VtaPromedio"
   DrillDownFieldName = ""
   DrillDownReportName = ""
   StoreIDFieldName = ""
   Title = "Venta Prom"
   VBDataType = vbCurrency
   Formula = "SUM(TransactionEntry.Price * (TransactionEntry.Quantity/3))"
   ColHidden = False
   ColNotDisplayable = False
   FilterDisabled = False
   ColWidth = 1425
   GroupMethod = groupmethodSum
   ColFormat = ""
End Column

Lo trabajaremos sin espacios, para no tener conflicto con los ciclos FOR.

El script que hice, cuenta las ocurrencias, y te va pidiendo qué escribir en la línea en donde se dió la ocurrencia, algo así:

Código:
C:\>lala.bat
1 : leito
2 : gutierrez

Begin Column
   FieldName = "Promedio"
   DrillDownFieldName = ""
   DrillDownReportName = ""
   StoreIDFieldName = ""
   Title = "Promedio"
   VBDataType = vbDouble
   Formula = "SUM(TransactionEntry.Quantity)/leito"
   ColHidden = False
   ColNotDisplayable = False
   FilterDisabled = False
   ColWidth = 990
   GroupMethod = groupmethodNone
   ColFormat = "#"
   ColAlignment = flexAlignLeftCenter
End Column
Begin Column
   FieldName = "VtaPromedio"
   DrillDownFieldName = ""
   DrillDownReportName = ""
   StoreIDFieldName = ""
   Title = "Venta Prom"
   VBDataType = vbCurrency
   Formula = "SUM(TransactionEntry.Price * (TransactionEntry.Quantity/gutierrez))"
   ColHidden = False
   ColNotDisplayable = False
   FilterDisabled = False
   ColWidth = 1425
   GroupMethod = groupmethodSum
   ColFormat = ""
End Column

C:\>

En este caso solo me pidió de 1 a 2, porque solo hubo dos ocurrencias de tipo: /3.

Aquí está el script:
Código
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /a "count=0"
  4. for /f "tokens=1" %%_ in ('type "file.txt" ^| findstr /v "^$" ^| findstr /r /i /n ".*\/[0-9]" ^| find /v /c ""') do (
  5. set "n_numbers=%%_";
  6. )
  7. set /a count=1
  8. for /f "tokens=1 delims=:" %%a in ('type "file.txt" ^| findstr /v "^$" ^| findstr /r /i /n ".*\/[0-9]"') do (
  9. set "ocurrencia[!count!]=%% style="color: #448888;">a";
  10. set /a count+=1
  11. )
  12. :code
  13. for /l %%_ in (1, 1, %n_numbers%); do (
  14. set /p "string_c[%%_]=%%_ : !!
  15. if not defined string_c[%%_] (goto:code)
  16. );
  17. for /f "tokens=1" %%_ in ('type "file.txt" ^| findstr /r /v "^$" ^| find /v /c ""') do (
  18. set "n_lines=%%_"
  19. )
  20. set /a n_lines+=1
  21. set /a count=1
  22. set /a count_str=1
  23. set /a i=1
  24. :show
  25. if !count! equ !n_lines! (goto:eof) else (
  26. if !count! equ !ocurrencia[% style="color: #448888;">i%]! (set /a "i+=1")
  27. findstr /v /r "^$" file.txt | sed -n "!count!p" | sed "s/\/[0-9]*/\/!string_c[% style="color: #448888;">i%]!/g"
  28. )
  29. set /a count+=1
  30. goto:show

Por cierto, necesitas sed para Windows, hacerlo con windows solamente sería un engorro.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: wajagaum en 19 Marzo 2010, 21:16
Brothers
te cuento que no funciona solo ejecuto el bat, me pide los valores pero no actualiza a los nuevos escritos en pantalla que debo hacer.  :D


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 19 Marzo 2010, 23:06
Brothers
te cuento que no funciona solo ejecuto el bat, me pide los valores pero no actualiza a los nuevos escritos en pantalla que debo hacer.  :D

Ponme el script que estás usando, el archivo de texto que quieres editar, dime que es exactamente que es lo que quieres editar y si puedes ponme una captura de pantalla.

El script lo he probado y a mi sí me funciona.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: wajagaum en 20 Marzo 2010, 15:35
ok mira, lo que yo quiero es que un bat, me muestre que numero hay en la fila # x y en la fila #, Y que pida reemplazarlo por un numero nuevo y lo reemplce:

el texto es este mira...
nota: no es .txt es .qrp


Mi caso es que quiero que me muestre que numero hay despues del / que son la cantidad de meses y cuando me toque cambiarlo me muestre cuantos meses hay y pueda cambiarlo a lli mismo.


//--- Report Summary --- //

Begin ReportSummary
   ReportType = reporttypeSales
   ReportTitle = "Reporte Ventas Compras"
   PageOrientation = pageorientationPortrait
   WordWrap = False
   ShowDateTimePicker = True
   OutLineMode = True
   Groups = 0
   GroupDescription = ""
   DisplayLogo = True
   LogoFileName = "Walter Galvez"
   ProcedureCall = ""
   PreQuery1 = ""
   PreQuery2 = ""
   TablesQueried = <BEGIN>

      FROM        TransactionEntry WITH(NOLOCK) 
      INNER JOIN  [Transaction] WITH(NOLOCK)
                  ON TransactionEntry.TransactionNumber = [Transaction].TransactionNumber
                  AND TransactionEntry.StoreID = [Transaction].StoreID
      LEFT JOIN   Item WITH (NOLOCK)
                  ON TransactionEntry.ItemID = Item.ID
      LEFT JOIN   Department WITH(NOLOCK)
                  ON Item.DepartmentID = Department.ID
      LEFT JOIN   Category WITH(NOLOCK)
                  ON Item.CategoryID = Category.ID
      LEFT JOIN   Supplier WITH(NOLOCK)
                  ON Item.SupplierID = Supplier.ID
      LEFT JOIN   WGPadres WITH(NOLOCK)
        ON Item.ParentItem = WGPadres.Id
      LEFT JOIN   WGQtyCD WITH(NOLOCK)
        ON Item.Id = WGQtyCD.ItemId
      LEFT JOIN   Store ON TransactionEntry.StoreID = Store.ID

<END>
   SelCriteria = ""
   GroupBy = "Item.ItemLookupCode"
   SortOrder = "Depto, ItemDescription"
End ReportSummary


//--- Title Rows ---//

Begin TitleRow
   Text = "<Store Name>"
   Font = "Arial"
   FontBold = True
   FontSize = 16
   Color = "Blue"
End TitleRow

Begin TitleRow
   Text = "<Report Title>"
   Font = "Arial"
   FontBold = True
   FontSize = 12
   Color = "Black"
End TitleRow

Begin TitleRow
   Text = "Generated On <Report Date>"
   Font = "Arial"
   FontBold = True
   FontSize = 10
   Color = "Black"
End TitleRow


//--- Filters ---//

Begin Filter
   FieldName = "[Transaction].Time"
   FilterOp = reportfilteropBetween
   FilterLoLim = "15/01/2010"
   FilterHilim = "16/03/2010"
   FilterNegated = False
   FilterConnector = reportfilterbooleanconAND
End Filter


//--- Columns ---//

Begin Column
   FieldName = "Promedio"
   DrillDownFieldName = ""
   DrillDownReportName = ""
   StoreIDFieldName = ""
   Title = "Promedio"
   VBDataType = vbDouble
   Formula = "SUM(TransactionEntry.Quantity)/3"
   ColHidden = False
   ColNotDisplayable = False
   FilterDisabled = False
   ColWidth = 990
   GroupMethod = groupmethodNone
   ColFormat = "#"
   ColAlignment = flexAlignLeftCenter
End Column

Begin Column
   FieldName = "VtaPromedio"
   DrillDownFieldName = ""
   DrillDownReportName = ""
   StoreIDFieldName = ""
   Title = "Venta Prom"
   VBDataType = vbCurrency
   Formula = "SUM(TransactionEntry.Price * (TransactionEntry.Quantity/3))"
   ColHidden = False
   ColNotDisplayable = False
   FilterDisabled = False
   ColWidth = 1425
   GroupMethod = groupmethodSum
   ColFormat = ""
End Column


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: M_A_R_T_I_N en 28 Marzo 2010, 23:24
Añade "^" antes del carácter.

Para EDLIN no es válido.

Hola, abria alguna manera de hacerlo o bien de borrar las comillas despues de reemplazado el texto?
Muchas Gracias.

Con edlin vas a seguir teniendo problemas.

Así que te recomiendo sed para Windows, con una expresión regular bastaría.


1000 Gracias!!! Funciona ok!!!


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: KamuiDNA en 22 Abril 2010, 23:20
Hola, tengo una duda, realize un proceso en Batch que me efectua el despliegue de datos de una base de lluvia por dia,  el proceso funciona bien  y esta probado en windows vista y XP, pero al montarlo en windows server 2003 este solo ejecuta la mitad del programa y lo cierra, no me marca ningun error ni nada, solo hace como que lo ejecuta pero no ejecuta todo el proceso, alguna idea o sugerencia.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: KamuiDNA en 23 Abril 2010, 00:20
problema resuelto. thx


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 23 Abril 2010, 00:26
Coloca tu código con la etiqueta GeShi, sino borraré el mensaje.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 25 Abril 2010, 01:30
Necesitamos el contenido de ISLA_Diaria.txt.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: KamuiDNA en 26 Abril 2010, 16:49
problema resuelto. thx


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: KamuiDNA en 17 Mayo 2010, 22:56
Alguna idea de por que no funciona ?


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: astral_153 en 27 Mayo 2010, 03:45
Hola soy nuevo en esto xD….    Necesito su ayuda para organizar el contenido de un documento de texto….  De mayor a menor……….

Ej:

File.txt

Código:
5
8
9
3
5
8
4
5
2
6

Y quiero que me salga

File.txt

Código:
9
8
8
6
5
5
5
4
3
2
Gracias de antemano xD xD xD

El foro es muy bueno e interesante.. me ha ayudado mucho………  ;-) xD


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 27 Mayo 2010, 04:08
¿Has usado el comando sort?

Código
  1. type file.txt | sort
  2. type file.txt | sort -r
  3. sort < file.txt
  4.  


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: astral_153 en 27 Mayo 2010, 19:50
Código:
¿Has usado el comando sort?

Código
type file.txt | sort
type file.txt | sort -r
sort < file.txt


gracias por el comado, no lo conocia aun... que do perfecto...... lo utilice de la siguiente manera.
Citar
@ echo off

type file.txt | sort /r

pause

solamente hay un pequeño problema.....
si pongo cantidades mas alta las organiza por el primer numero....


Ej:

Citar
88
77
66
8855
214
1
1111
1
sale asi
Citar
8855
88
77
66
214
1111
1
1
y deberia salir de esta manera...
Citar
1111
214
88
77
66
1
1
asi estaria organizado del mas alto al mas pequeño por cantidad
Graciass.. Nuevamente.   ;D


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 28 Mayo 2010, 01:04
Bueno, una vez más está comprobado que las herramientas que da Windows son una reverenda porquería:

Código
  1. C:\>type file.txt
  2. 88
  3. 77
  4. 66
  5. 8855
  6. 214
  7. 1
  8. 1111
  9. 1
  10.  
  11.  
  12. C:\>type file.txt | sort
  13.  
  14. 1
  15. 1
  16. 1111
  17. 214
  18. 66
  19. 77
  20. 88
  21. 8855
  22.  
  23. C:\>

Hice este código que lo resuelve:
Código
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set contador=0
  4. for /f "eol= tokens=* delims=" %%x in (names.txt) do (
  5. set /a contador+=1
  6. set "linea[!contador!]=%% style="color: #448888;">x"
  7. )
  8. :: Algoritmo bubble sort:
  9. for /l %%i in (1, 1, %contador%) do (
  10. for /l %%j in (1, 1, %contador%) do (
  11. if !linea[%% style="color: #448888;">j]! lss !linea[%% style="color: #448888;">i]! (
  12. set "temporal=!linea[%% style="color: #448888;">i]!"
  13. set "linea[%%i]=!linea[%% style="color: #448888;">j]!"
  14. set "linea[%%j]=!temporal!"
  15. )
  16. )
  17. )
  18. for /l %%_ in (1, 1, !contador!) do (
  19. echo Linea : !linea[% style="color: #448888;">%_]!
  20. )

Con un simple algoritmo bubble sort bastó:
Código:

C:\>type file.txt
88
77
66
8855
214
1
1111
1


C:\>code.bat
Linea : 8855
Linea : 1111
Linea : 214
Linea : 88
Linea : 77
Linea : 66
Linea : 1
Linea : 1

C:\>

¿Para qué querías ordenar ese archivo?

Por cierto el código también sirve para ordenar cadenas de caracteres:

Código:
C:\>type file.txt
Carlos
Lupe
Leo
Adriana
Yareli

C:\>code.bat
Linea : Yareli
Linea : Lupe
Linea : Leo
Linea : Carlos
Linea : Adriana

C:\>


Saludos.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 28 Mayo 2010, 01:11
Alguna idea de por que no funciona ?

Cuando no ayudo es porque no me especifican bien que es lo que quieres, o porque no me dejas una salida de como debiera quedar el archivo de texto, así que te sugiero pongas el mensaje de nuevo explicando paso a paso qué es lo que quieres.

Saludos.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: astral_153 en 29 Mayo 2010, 00:29
:o Hooo …… gracias por la aplicación…… funciona perfectamente ;-).... Ha lo necesito para organizar artículos vendidos de mayor a menor.. Para  saber cual se vendió mas.. En un mes...y así cada mes.. pude hacerlo en excel pero me interesa aprender sobre batch....

gracias nuevamente..  ;-)


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: labandera en 11 Junio 2010, 10:29
Hola,

A ver si alguien me puede ayudar... Necesito hacer un script que me lea un .txt que contenga numeros de la siguiente forma:

123
4322
3434
3343
3434
.
.
.

Lo que tengo que conseguir es que el script lea solamente los dos últimos números (los de abajo) y me los compare y me devuelva si son iguales o no. Supongo que es sencillo pero soy nulo para esto.

Muchas gracias de antemano


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 11 Junio 2010, 20:25
Código:
C:\>type file.txt
32013
233
25640
22503
9834
30482
25655
1122
7745
3570

C:\>

Código
  1. @echo off
  2. type "file.txt" | findstr /v /n "%RANDOM%jasdkjlakjsdas%RANDOM%"
  3. for /f "tokens=*" %%# in ('type "file.txt" ^| find /v /c ""') do (set "nLines=%%#";)
  4. :: Sacar la última línea:
  5. for /f "tokens=1-2 delims=:" %%a in ('
  6. type "file.txt" ^| findstr /v /n "%RANDOM%!" ^| findstr /r /i "^%nLines%:.*"
  7. ') do (
  8. set "compare_1=%%b";
  9. )
  10. echo.&echo Ultima linea :
  11. echo %nLines%: %compare_1%
  12. :: Sacar la penúltima línea:
  13. set /a "nLines-=1"
  14. for /f "tokens=1-2 delims=:" %%a in ('
  15. type "file.txt" ^| findstr /v /n "%RANDOM%!" ^| findstr /r /i "^%nLines%:.*"
  16. ') do (
  17. set "compare_2=%%b";
  18. )
  19. echo Penultima linea :
  20. echo %nLines%: %compare_2%
  21. echo.&echo Comparando...
  22. if %compare_1% equ %compare_2% (
  23. echo "Son iguales"
  24. ) else (
  25. echo "No son iguales"
  26. )

Código:
C:\>code.bat
1:32013
2:233
3:25640
4:22503
5:9834
6:30482
7:25655
8:1122
9:7745
10:3570

Ultima linea :
10: 3570
Penultima linea :
9: 7745

Comparando...
"No son iguales"

C:\>
Código:
C:\>code
1:1
2:2
3:3
4:4
5:5
6:6
7:6

Ultima linea :
7: 6
Penultima linea :
6: 6

Comparando...
compare_1=6
compare_2=6
"Son iguales"

C:\>
Código
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "contador=0"
  4. :: Mostrar el archivo :
  5. type "file.txt" | findstr /v /n "%RANDOM:~ajshdjkasd!"
  6. for /f "tokens=*" %%_ in ('type "file.txt" ^| find /v /c ""') do (set "nLines=%%_";)
  7. for /f "tokens=* delims=" %%_ in (file.txt) do (
  8. set /a "contador+=1"
  9. set "linea[!contador!]=% style="color: #448888;">%_"
  10. )
  11. set "compare_1=!linea[% style="color: #448888;">nLines%]!";
  12. set /a "nLines-=1"
  13. set "compare_2=!linea[% style="color: #448888;">nLines%]!";
  14. if %compare_1% equ %compare_2% (
  15. echo "Son iguales"
  16. ) else (
  17. echo "No son iguales"
  18. )
  19.  
Dime para qué querías hacer eso.



Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: labandera en 11 Junio 2010, 22:56
Buenas, gracias por la respuesta, el lunes lo pruebo con calma y ya te cuento...

Lo necesito para monitorizar un error de un stderr.log (remedy). La idea es contar este error y pasarlo a un txt (que me sirve de contador). Cada x tiempo, pueden ser 5 min o 10 min, este contador lo paso a un txt en el que voy añadiendo el número de errores que salen.

Ahí entras tú, si los dos últimos números son iguales es que no se han incrementado los errores, si son distintos es que si, entonces tendría que reiniciar un servicio de otra máquina.

Espero haber sido claro. Muchas gracias, de verdad. Tengo ganas de probarlo, me estaba volviendo majara y no era capaz de sacarlo.



Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: astral_153 en 20 Junio 2010, 23:50
!Hola!  :D tengo una pequeña duda y necesito su ayuda....  :huh:   estoy intentando hacer una aplicacion bat que me cierre la cesion tras... (-t xx) XX tiempo.

este codigo funciona perfectamente..

Código:
shutdown -r -f -t 30

se reinicia en 30 segundos
pero


Código:
shutdown -l -f -t 30

deberia cerrar sesion en 30 segundos.
y la cierra al instante...


necesito su yuda o algo similar que pueda utilizar
preferiblemente que aparezca en una ventana que no pueda que no permita cancelar facilmente.. xD xD xD ...

gracias de antemano.... !Buen Post!  ;-)   ^^,


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 20 Junio 2010, 23:53
A ver, analicemos.

¿Tu duda tiene algo que ver con "Acciones sobre archivos de texto"?

Contéstame.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: astral_153 en 21 Junio 2010, 02:08
 ;D la verdad es que no.....    no me abia fijado en ese detalle..... excuse...   :-[ soy un poco nuevo en esto... pense que como se trataba de batch podrian contestar.... bueno si no se puede buscare otro post... xD xD xD

de todas maneras gracias, felicidades este post me han ayudado mucho..  ;-)


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 21 Junio 2010, 02:18
Sí, por favor crea un nuevo tema.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: carlosguay en 4 Julio 2010, 21:04
Ya que mi problema es de archivos de texto, lo pongo aqui por no abrir otro hilo.

Primero decir que gracias a este hilo, e podido solucionar muchas de las cosas que estoy haciendo com mis archivos, gracias a leo por este aporte.

Vereis tengo un problema que no se como solucionar con este archivo.

 
Citar
ad 55 6b b9   ad b6 ef ba   05 bc 36 9d   3c 86 43 38
  bf cf 2f bf   4a 8b d7 09   4d 02 41 00   bc c7 88 fd 
  f7 19 be aa   03 c6 18 ee   b3 2c b9 b8   73 89 0b 72 
  06 57 8b c9   77 b3 79 c3   4f 5f db 60   e7 89 bd 55 
  06 90 79 12   f6 84 67 b1   84 c4 dc 22   5b 3a 7f 45 
  ac 5d 14 7e   1d c6 b9 65   8f 6c 37 36| .].~...e.l76

LINEA CON TEXTO



Este archivo, en la parte de la derecha, lleva codigo acssi, que como veis no tengo problema en quitarlo, pero ya veis que en el penultimo renglon ya que la parte de hex no llega hasta el final, pues me deja parte del acssi.

Os pondria de las formas que e intentado quitar la ultima linea y la parte de acsii, pero ya se me an olvidado, xd, siempre consigo esto.


Citar

ad 55 6b b9 ad b6 ef ba 05 bc 36 9d 3c 86 43 38
bf cf 2f bf 4a 8b d7 09 4d 02 41 00 bc c7 88 fd
f7 19 be aa 03 c6 18 ee b3 2c b9 b8 73 89 0b 72
06 57 8b c9 77 b3 79 c3 4f 5f db 60 e7 89 bd 55
06 90 79 12 f6 84 67 b1 84 c4 dc 22 5b 3a 7f 45



Como veis no solo borro la ultima linea y la parte de acsii, sino que tambien borro la linea completa y se seguro que es por |, toma como ultima linea esa y eso es lo que pasa.

Pues si alquien me puede ayudar, me haria un gran favor.

saludos





Hola de nuevo.

Deje el tema por falta de tiempo y ahora lo he vuelto a retomar, si me pudierais hechar una manita, o alguna idea, seria de agradecer.

saludos


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 4 Julio 2010, 21:47
¿Cuál es el código que intentaste?

Se pudiera trabajar con sed para ahorrar problemas, mira:

Código:
C:\>type file.txt
ad 55 6b b9   ad b6 ef ba   05 bc 36 9d   3c 86 43 38
  bf cf 2f bf   4a 8b d7 09   4d 02 41 00   bc c7 88 fd
  f7 19 be aa   03 c6 18 ee   b3 2c b9 b8   73 89 0b 72
  06 57 8b c9   77 b3 79 c3   4f 5f db 60   e7 89 bd 55
  06 90 79 12   f6 84 67 b1   84 c4 dc 22   5b 3a 7f 45
  ac 5d 14 7e   1d c6 b9 65   8f 6c 37 36| .].~...e.l76



C:\>


Código:
C:\>type file.txt | sed -e "s/\.//g" -e "s/\]//g" -e "s/~//g" -e "s/|//g"
ad 55 6b b9   ad b6 ef ba   05 bc 36 9d   3c 86 43 38
  bf cf 2f bf   4a 8b d7 09   4d 02 41 00   bc c7 88 fd
  f7 19 be aa   03 c6 18 ee   b3 2c b9 b8   73 89 0b 72
  06 57 8b c9   77 b3 79 c3   4f 5f db 60   e7 89 bd 55
  06 90 79 12   f6 84 67 b1   84 c4 dc 22   5b 3a 7f 45
  ac 5d 14 7e   1d c6 b9 65   8f 6c 37 36 el76



C:\>

Saludos.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: carlosguay en 5 Julio 2010, 14:21
Gracias leo por tu respuesta tan rapida, pero hay un problemilla.

Veras som muchisimos archivos, todos con hex y acsii, asin.


 
Código:
ad 55 6b b9   ad b6 ef ba   05 bc 36 9d   3c 86 43 38  | .Uk.......6.<.C8
  bf cf 2f bf   4a 8b d7 09   4d 02 41 00   bc c7 88 fd     | ../.J...M.A.....
  f7 19 be aa   03 c6 18 ee   b3 2c b9 b8   73 89 0b 72  | .........,..s..r
  06 57 8b c9   77 b3 79 c3   4f 5f db 60   e7 89 bd 55   | .W..w.y.O_.`...U
  06 90 79 12   f6 84 67 b1   84 c4 dc 22   5b 3a 7f 45   | ..y...g...."[:.E
  ac 5d 14 7e   1d c6 b9 65   8f 6c 37 36                       | .].~...e.l76


Como ves la parte de la derecha, tiene los hex convertidos en acsii, y com este codigo pues lo quito todo, ya que para manipular el archivo, necesito quitar toda esa parte.

Código:
type private.txt
for /f "tokens=1-16" %%a in ('type texto1.txt') do (
echo %%a %%b %%c %%d %%e %%f %%g %%h %%i %%j %%k %%l %%m %%n %%o %%p >> texto2.txt
)
echo:
type texto2.txt
Tip provisto por Tomi Salmi.

Veo que lo que me pones, quita caracter por carater, pero los archivos som distintos, osea que esa parte es solo en ese archivo, en otros es totalmente distinto, lo unico que es igual es el |, por eso realmente lo que necesito, es algo que me quite TODO, a partir del | incluido.

Ahora esta mas claro, no, gracias


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 6 Julio 2010, 22:26
Gracias leo por tu respuesta tan rapida, pero hay un problemilla.

Veras som muchisimos archivos, todos con hex y acsii, asin.


 
Código:
ad 55 6b b9   ad b6 ef ba   05 bc 36 9d   3c 86 43 38  | .Uk.......6.<.C8
  bf cf 2f bf   4a 8b d7 09   4d 02 41 00   bc c7 88 fd     | ../.J...M.A.....
  f7 19 be aa   03 c6 18 ee   b3 2c b9 b8   73 89 0b 72  | .........,..s..r
  06 57 8b c9   77 b3 79 c3   4f 5f db 60   e7 89 bd 55   | .W..w.y.O_.`...U
  06 90 79 12   f6 84 67 b1   84 c4 dc 22   5b 3a 7f 45   | ..y...g...."[:.E
  ac 5d 14 7e   1d c6 b9 65   8f 6c 37 36                       | .].~...e.l76


Como ves la parte de la derecha, tiene los hex convertidos en acsii, y com este codigo pues lo quito todo, ya que para manipular el archivo, necesito quitar toda esa parte.

Código:
type private.txt
for /f "tokens=1-16" %%a in ('type texto1.txt') do (
echo %%a %%b %%c %%d %%e %%f %%g %%h %%i %%j %%k %%l %%m %%n %%o %%p >> texto2.txt
)
echo:
type texto2.txt
Tip provisto por Tomi Salmi.

Veo que lo que me pones, quita caracter por carater, pero los archivos som distintos, osea que esa parte es solo en ese archivo, en otros es totalmente distinto, lo unico que es igual es el |, por eso realmente lo que necesito, es algo que me quite TODO, a partir del | incluido.

Ahora esta mas claro, no, gracias

Sí, ya más claro, ¿pero siempre hay ese delimitador?

O sea, siempre está
Citar
texto..... | texto....

¿?


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: carlosguay en 7 Julio 2010, 17:13

Sí, ya más claro, ¿pero siempre hay ese delimitador?

O sea, siempre está
Citar
texto..... | texto....

¿?


Si leo, SIEMPRE, esta el | y ni el, ni lo que sigue, lo necesito, solo los hexs.

Osea, TODOS los archivos, los necesito asin.

Código:
  ad 55 6b b9   ad b6 ef ba   05 bc 36 9d   3c 86 43 38 
  bf cf 2f bf   4a 8b d7 09   4d 02 41 00   bc c7 88 fd     
  f7 19 be aa   03 c6 18 ee   b3 2c b9 b8   73 89 0b 72
  06 57 8b c9   77 b3 79 c3   4f 5f db 60   e7 89 bd 55   
  06 90 79 12   f6 84 67 b1   84 c4 dc 22   5b 3a 7f 45   
  ac 5d 14 7e   1d c6 b9 65   8f 6c 37 36   


y NO me sirven asin.

 
Código:
  ad 55 6b b9   ad b6 ef ba   05 bc 36 9d   3c 86 43 38   | .Uk.......6.<.C8
  bf cf 2f bf   4a 8b d7 09   4d 02 41 00   bc c7 88 fd   | ../.J...M.A.....
  f7 19 be aa   03 c6 18 ee   b3 2c b9 b8   73 89 0b 72   | .........,..s..r
  06 57 8b c9   77 b3 79 c3   4f 5f db 60   e7 89 bd 55   | .W..w.y.O_.`...U
  06 90 79 12   f6 84 67 b1   84 c4 dc 22   5b 3a 7f 45   | ..y...g...."[:.E
  ac 5d 14 7e   1d c6 b9 65   8f 6c 37 36                 | .].~...e.l76

A ver si fueras capaz de darme una idea, gracias.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 7 Julio 2010, 23:23
Código:
Ah, okay, ya te entendí, yo en principio no había contestado acertadamente porque creía que no todos los archivos tenían eso, siendo así esto trabaja bien:
C:\>type algo.txt
 ad 55 6b b9   ad b6 ef ba   05 bc 36 9d   3c 86 43 38   | .Uk.......6.<.C8
  bf cf 2f bf   4a 8b d7 09   4d 02 41 00   bc c7 88 fd   | ../.J...M.A.....
  f7 19 be aa   03 c6 18 ee   b3 2c b9 b8   73 89 0b 72   | .........,..s..r
  06 57 8b c9   77 b3 79 c3   4f 5f db 60   e7 89 bd 55   | .W..w.y.O_.`...U
  06 90 79 12   f6 84 67 b1   84 c4 dc 22   5b 3a 7f 45   | ..y...g...."[:.E
  ac 5d 14 7e   1d c6 b9 65   8f 6c 37 36                 | .].~...e.l76
C:\>for /f "tokens=1 delims=|" %_ in (algo.txt) do @(echo %_)
 ad 55 6b b9   ad b6 ef ba   05 bc 36 9d   3c 86 43 38
  bf cf 2f bf   4a 8b d7 09   4d 02 41 00   bc c7 88 fd
  f7 19 be aa   03 c6 18 ee   b3 2c b9 b8   73 89 0b 72
  06 57 8b c9   77 b3 79 c3   4f 5f db 60   e7 89 bd 55
  06 90 79 12   f6 84 67 b1   84 c4 dc 22   5b 3a 7f 45
  ac 5d 14 7e   1d c6 b9 65   8f 6c 37 36

C:\>

Código
  1. for /f "tokens=1 delims=|" %%_ in ('type algo.txt') do (
  2. echo %%_
  3. )

Usando sed:


Código:
C:\>type algo.txt | sed "s/\(.*\)|.*/\1/g"
 ad 55 6b b9   ad b6 ef ba   05 bc 36 9d   3c 86 43 38
  bf cf 2f bf   4a 8b d7 09   4d 02 41 00   bc c7 88 fd
  f7 19 be aa   03 c6 18 ee   b3 2c b9 b8   73 89 0b 72
  06 57 8b c9   77 b3 79 c3   4f 5f db 60   e7 89 bd 55
  06 90 79 12   f6 84 67 b1   84 c4 dc 22   5b 3a 7f 45
  ac 5d 14 7e   1d c6 b9 65   8f 6c 37 36

C:\>


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: carlosguay en 8 Julio 2010, 20:15
Justo, lo que necesitaba, ;-)

Gracias leo, e usado el codigo de for, me va estupendamente.

Te estoy muy agradecido, me as quitado un quebradero de cabeza.

un saludo amigo


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 8 Julio 2010, 22:23
Justo, lo que necesitaba, ;-)

Gracias leo, e usado el codigo de for, me va estupendamente.

Te estoy muy agradecido, me as quitado un quebradero de cabeza.

un saludo amigo

De nada.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: darth1024 en 5 Agosto 2010, 18:57
Estimado Leo, estuve revisando tus aportes al respecto y me parecen excelentes pero me atrevo a pedirte un favor en particular para poder extraer determinada porcion de texto de un txt.

Te puedo enviar la consulta a tu mail personal o sigo por este lado?

Gracias.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: darth1024 en 5 Agosto 2010, 19:06
Hola Leo, te molesto nuevamente pues me doy cuenta que puedo postear libremente mi consulta:

Tengo un archivo txt con el siguiente formato:

Session : 2010/08/05-7
                                                                             
ObjectType    : FileSystem
DiskAgentID   : 1281011407
Object Status : Completed
==============================================================================
-rw-r----- 1216988160  05/08/2010 07:06:13 /oracle/ora_bck/ctf/flash_recovery_area/CTF/backupset/2010_08_05/o1_mf_annnn_CTF_BK_ARC_65ob8yfj_.bkp
-rw-r-----   81516544  05/08/2010 07:05:53 /oracle/ora_bck/ctf/flash_recovery_area/CTF/backupset/2010_08_05/o1_mf_annnn_CTF_BK_ARC_65ob8yg1_.bkp

Session : 2010/08/04-20
                                                                             
ObjectType    : FileSystem
DiskAgentID   : 1280979007
Object Status : Completed
==============================================================================
-rw-r----- 1215431168  04/08/2010 22:02:43 /oracle/ora_bck/ctf/flash_recovery_area/CTF/backupset/2010_08_04/o1_mf_annnn_CTF_BK_ARC_65nbf9hc_.bkp
-rw-r----- 1214676480  04/08/2010 22:02:44 /oracle/ora_bck/ctf/flash_recovery_area/CTF/backupset/2010_08_04/o1_mf_annnn_CTF_BK_ARC_65nbf9j0_.bkp

Session : 2010/08/05-10
                                                                             
ObjectType    : FileSystem
DiskAgentID   : 1281018607
Object Status : Completed
==============================================================================

-rw-r----- 1227828224  05/08/2010 09:01:14 /oracle/ora_bck/ctf/flash_recovery_area/CTF/backupset/2010_08_05/o1_mf_annnn_CTF_BK_ARC_65ojzrk4_.bkp
-rw-r----- 1225617920  05/08/2010 09:01:16 /oracle/ora_bck/ctf/flash_recovery_area/CTF/backupset/2010_08_05/o1_mf_annnn_CTF_BK_ARC_65ojzrkz_.bkp


Lo que quiero es extraer el texto del detalle "-rw-r-----" que se muestra para cada sesion. O sea, generar un archivo nuevo en base a las sesiones por dia de mi txt original.

Espero me puedas dar una mano.

Muchas gracias.

Sam




Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 5 Agosto 2010, 21:07
Por aquí mismo.

En un momento checo tu duda.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 5 Agosto 2010, 22:00
@darth1024

No he entendido bien como deseas que aparezca la información en el archivo de texto.

Este script ofrece algo, pero no sé si es lo que quieres:

Código
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /a counter=0
  4. for /f "tokens=*" %%_ in ('type "file.txt" ^| find "-rw-r-----"') do (
  5. set /a counter+=1
  6. echo %%_ > "log_!counter!.txt"
  7. )
  8. exit /b 0

Ponme una muestra de como debiera quedar en el o los archivos de texto.

Saludos.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: darth1024 en 6 Agosto 2010, 23:01
Gracias por tu respuesta Leo.

basicamente se trata de crear un nuevo txt a partir del archivo original. Este original contiene las "sesiones" de varios dias y yo por mi cuenta voy a filtrar que dia quiero generar.

Ejm:


ORIGINAL (veras que vienen 3 grupos de sesiones dos del dia 05/08 y una del 06/08)

Session : 2010/08/06-8
                                                                             
ObjectName    : fasactf.fasa.com.pe:/oracle/ora_bck '/oracle/ora_bck'
ObjectType    : FileSystem
DiskAgentID   : 1281097807
Object Status : Completed
=====================================================
drwxr-x---        256  04/08/2010 23:30:04 /oracle/ora_bck/ctf/flash_recovery_area/CTF/backupset/2010_08_03/
drwxr-x---        256  05/08/2010 23:30:03 /oracle/ora_bck/ctf/flash_recovery_area/CTF/backupset/2010_08_04/

Session : 2010/08/05-20
                                                                             
ObjectName    : fasactf.fasa.com.pe:/oracle/ora_bck '/oracle/ora_bck'
ObjectType    : FileSystem
DiskAgentID   : 1281051007
Object Status : Completed
=====================================================-rw-r----- 1214829568  05/08/2010 18:00:56 /oracle/ora_bck/ctf/flash_recovery_area/CTF/backupset/2010_08_05/
-rw-r----- 1214404608  05/08/2010 18:00:59 /oracle/ora_bck/ctf/flash_recovery_area/CTF/backupset/2010_08_05/

Session : 2010/08/05-7
                                                                             
ObjectName    : fasactf.fasa.com.pe:/oracle/ora_bck '/oracle/ora_bck'
ObjectType    : FileSystem
DiskAgentID   : 1281011407
Object Status : Completed
=====================================================-rw-r----- 1216808448  05/08/2010 07:06:08 /oracle/ora_bck/ctf/flash_recovery_area/CTF/backupset/2010_08_05/
-rw-r----- 1213480960  05/08/2010 07:06:14 /oracle/ora_bck/ctf/flash_recovery_area/CTF/backupset/2010_08_05/


RESULTADO (por ejm. solo quiero quedarme con los dos del 05/08)

Session : 2010/08/05-20
                                                                             
ObjectName    : fasactf.fasa.com.pe:/oracle/ora_bck '/oracle/ora_bck'
ObjectType    : FileSystem
DiskAgentID   : 1281051007
Object Status : Completed
=====================================================-rw-r----- 1214829568  05/08/2010 18:00:56 /oracle/ora_bck/ctf/flash_recovery_area/CTF/backupset/2010_08_05/
-rw-r----- 1214404608  05/08/2010 18:00:59 /oracle/ora_bck/ctf/flash_recovery_area/CTF/backupset/2010_08_05/

Session : 2010/08/05-7
                                                                             
ObjectName    : fasactf.fasa.com.pe:/oracle/ora_bck '/oracle/ora_bck'
ObjectType    : FileSystem
DiskAgentID   : 1281011407
Object Status : Completed
=====================================================-rw-r----- 1216808448  05/08/2010 07:06:08 /oracle/ora_bck/ctf/flash_recovery_area/CTF/backupset/2010_08_05/
-rw-r----- 1213480960  05/08/2010 07:06:14 /oracle/ora_bck/ctf/flash_recovery_area/CTF/backupset/2010_08_05/


Entiendes?, solo deseo las tramas pertenecientes al dia (sesion) que escogi  (que vendria a ser la cabecera de cada pequeña trama).

Gracias por tu ayuda, Leo.



Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: patorejo en 12 Agosto 2010, 06:46
muy buena informacion t la agradezco,debio costarte mucho trabajo pero qdo excelente ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-)

lo que pasa es que no me qda muy claro el codigo para reemplazar una palabra de un txt

segun yo mas o menos va a asi
Código:
@echo off
(
echo 2<<<------------NUMERO DE LINEA A MODIFICAR
echo Gutierrez<<<<---------PALABRA Q SE VA A PONER EN VEZ DEL Q ESTABA EN LA SEGUNDA LINEA

) | edlin /b c:\TEXTO.txt<<<----------------RUTA DEL ARCHIVO QUE SE VA A MODIFICAR

pero no me funciona no me cambia la palabra,queda igual,es q quiero este codigo para ver si es posible hacer,por ejemplo si tengo en un texto por llamarlo "detelle.txt" y dentro de este txt tengo una linea que contiene  "ip=192.168.12.1"

lo q quiero saber es si es q se puede  cojer el valor de esa ip y ponerla en una variable por ejemplo qdaria "ip=a"(claro esta que "a=192.168.12.1"),y dicha variable  "a"  tome el valor  de otro txt llamado ips.txt.



txt 1--->detalle.txt
contiene:

codigo:255
registro:2333
nombre pc:25555
ip:192.168.12.1<<<----------------hacer que "ip=a" y que  "a" tome los valores del otro txt llamado "ips.txt" aleatoriamente


txt 2---->ips.txt
contiene:

125.251.32.1
145.21.23.5
147.28.6.2
123.214.36.4
125.253.24.26
12.36.25.58
89.25.41.65
41.25.36.41


 :-X :-X :-X no se sera posible hacer eso pero creo q con los conocimientos q ya tiens me podes guiar un poco a como hacerlo,de anemano t agradezco por la ayuda q ya me has brindado


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: darth1024 en 19 Agosto 2010, 12:18
Estimado Leo, no quiero molestarte pero tuviste oportunidad de revisar mi anterior mensaje, donde describia el formato final deseado?


Samuel.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 19 Agosto 2010, 22:28
Estimado Leo, no quiero molestarte pero tuviste oportunidad de revisar mi anterior mensaje, donde describia el formato final deseado?


Samuel.

Sí, pero estaba ocupado y se me olvidó, mira lo resolví así.

Use sed para Windows, debes descargarlo, es gratis y te será  de utilidad.

Tomando el ejemplo de archivo que dejaste, este:


Código:
Session : 2010/08/06-8
                                                                             
ObjectName    : fasactf.fasa.com.pe:/oracle/ora_bck '/oracle/ora_bck'
ObjectType    : FileSystem
DiskAgentID   : 1281097807
Object Status : Completed
=====================================================
drwxr-x---        256  04/08/2010 23:30:04 /oracle/ora_bck/ctf/flash_recovery_area/CTF/backupset/2010_08_03/
drwxr-x---        256  05/08/2010 23:30:03 /oracle/ora_bck/ctf/flash_recovery_area/CTF/backupset/2010_08_04/

Session : 2010/08/05-20
                                                                             
ObjectName    : fasactf.fasa.com.pe:/oracle/ora_bck '/oracle/ora_bck'
ObjectType    : FileSystem
DiskAgentID   : 1281051007
Object Status : Completed
=====================================================-rw-r----- 1214829568  05/08/2010 18:00:56 /oracle/ora_bck/ctf/flash_recovery_area/CTF/backupset/2010_08_05/
-rw-r----- 1214404608  05/08/2010 18:00:59 /oracle/ora_bck/ctf/flash_recovery_area/CTF/backupset/2010_08_05/

Session : 2010/08/05-7
                                                                             
ObjectName    : fasactf.fasa.com.pe:/oracle/ora_bck '/oracle/ora_bck'
ObjectType    : FileSystem
DiskAgentID   : 1281011407
Object Status : Completed
=====================================================-rw-r----- 1216808448  05/08/2010 07:06:08 /oracle/ora_bck/ctf/flash_recovery_area/CTF/backupset/2010_08_05/
-rw-r----- 1213480960  05/08/2010 07:06:14 /oracle/ora_bck/ctf/flash_recovery_area/CTF/backupset/2010_08_05/

Y el siguiente código:
Código
  1. @echo off
  2. echo Sesiones en "file.txt" :
  3. for /f "tokens=2* delims=/" %%a in ('type "file.txt" ^| findstr "^Sess.*"') do (
  4. echo %%a/%%b
  5. )
  6.  
  7. :menu
  8. set /p "choice=Escriba el tipo de sesión que desea en el formato 08/05 : !!
  9. if not defined choice (goto:menu)
  10.  
  11. rem Muestreo de datos:
  12. set "choice=%choice:/=\/%"
  13. rem Puedes usar redirección para obtener la salida del siguiente comando:
  14. type "file.txt" | sed -n "/^Session : 2010\/\%choice%.*$/,/^$/p"
  15.        set /p "=";
  16. exit /b 0
  17.  
  18.  

Una prueba de ejecución:

Código:
C:\>code.bat
Sesiones en "file.txt" :

08/06-8
08/05-20
08/05-7

Escriba el tipo de sesi¾n que desea en el formato 08/05 : 08/05
Session : 2010/08/05-20

ObjectName    : fasactf.fasa.com.pe:/oracle/ora_bck '/oracle/ora_bck'
ObjectType    : FileSystem
DiskAgentID   : 1281051007
Object Status : Completed
=====================================================-rw-r----- 1214829568  05/08/2010 18:00:56 /
oracle/ora_bck/ctf/flash_recovery_area/CTF/backupset/2010_08_05/
-rw-r----- 1214404608  05/08/2010 18:00:59 /oracle/ora_bck/ctf/flash_recovery_area/CTF/backupset/
2010_08_05/

Session : 2010/08/05-7

ObjectName    : fasactf.fasa.com.pe:/oracle/ora_bck '/oracle/ora_bck'
ObjectType    : FileSystem
DiskAgentID   : 1281011407
Object Status : Completed
=====================================================-rw-r----- 1216808448  05/08/2010 07:06:08 /
oracle/ora_bck/ctf/flash_recovery_area/CTF/backupset/2010_08_05/
-rw-r----- 1213480960  05/08/2010 07:06:14 /oracle/ora_bck/ctf/flash_recovery_area/CTF/backupset/
2010_08_05/


C:\>code
Sesiones en "file.txt" :

08/06-8
08/05-20
08/05-7

Escriba el tipo de sesi¾n que desea en el formato 08/05 : 08/06
Session : 2010/08/06-8

ObjectName    : fasactf.fasa.com.pe:/oracle/ora_bck '/oracle/ora_bck'
ObjectType    : FileSystem
DiskAgentID   : 1281097807
Object Status : Completed
=====================================================
drwxr-x---        256  04/08/2010 23:30:04 /oracle/ora_bck/ctf/flash_recovery_area/CTF/backupset/
2010_08_03/
drwxr-x---        256  05/08/2010 23:30:03 /oracle/ora_bck/ctf/flash_recovery_area/CTF/backupset/
2010_08_04/

C:\>

Saludos.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: WiZZard en 22 Agosto 2010, 05:38

Excelente manual, se merece chincheta!!   ;-)


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: darth1024 en 25 Agosto 2010, 08:40
Estimado Leo, en verdad es Ud. un Genio!!, muchas gracias por tu apoyo.

Voy a buscar el "sed" para windows y lo pruebo pero a simple vista se ve formidable tu solución. :D

Gracias. ;-)


Darth1024


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Hekaly en 28 Agosto 2010, 12:55
Buenas. Tengo una duda para extraer cierta información de un archivo .txt pero no me sale y ya he probado de mil maneras.

Una de las parte que tiene el script que estoy creando es para sacar automaticamente el número de paginas que tiene un capitulo de un manga. Bien ya he encontrado en que parte está del código pero no consigo extraerlo en una variable.

Las herramientas que uso son las versiones Windows de "lynx" (para guardar el codigo de la web en un txt) y "cut" para extraer trozos de un string.

Bien cuando uso lynx para guarda la web se guarda esto en el txt.

Código:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd"><html<head><meta http-equiv="Content-Type" content="
text/html;charset=utf-8"/><title>Swot 8 (HQ) &mdash; IchiNoFansub &mdash; submanga.com</title><base href="http://submanga.com/"/><link rel="shortcut icon"
 href="http://submanga.com/static/images/favicon.gif"/></head><frameset style="background:#000" width="100%" height="100%" frameborder="0" framespacing="0"
 noresize rows="*"><frame style="background:#000;" width="auto" height="auto" id="manga" scrolling="auto" frameborder="0" framespacing="0" src="
./leer?mode=abajo&n=1&m=20&c=8&s=Swot&f=IchiNoFansub&id=85963"/></frameset></html>

* Todo es en una linea, lo he partido para que la linea no salga de los bordes del foro.

El numero de paginas que tiene un capitulo se encuntra al final del archivo.

Código:
./leer?mode=abajo&n=1&m=20&c=8&s=Swot&f=IchiNoFansub&id=85963"

El numero de paginas de cualquier capitulo esta donde pone "20" y es lo que quiero extraer para guardarlo en una variable.

Hasta aqui todo perfecto pero he probado con cut -c columnas > txt, cut -d -f > txt, pero nada, no me muestra mas que style="background:#000;"

He estado investigando y si tengo el archivo en rtf y lo guardo como unicode si he podido extraerlo, pero no se guardar archivos unicode desde la terminal, he probado con "cmd /u /c lynx ....... > archivo.txt" y nada.

Sabriais alguna forma de extraer el numero, hay algun parametro de find o findstr que simule cut -c y extraer el número.

 Muchas gracias por la respuesta.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 28 Agosto 2010, 21:53
Eso se hace facilmente con FOR, cuando tenga tiempo doy una respuesta.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Hekaly en 30 Agosto 2010, 00:35
Muchas gracias Leo, esperaré con ansias la respuesta.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: flony en 30 Agosto 2010, 17:58
leo una opcion seria con extraccion de caracteres siempre que tenga la misma longitud y los archivos de manga no supere los 100  :laugh:
Código:
<"manga.txt" set /p "a="
set "a"
set var=%a:~630,2%
echo %var%
pause


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Hekaly en 30 Agosto 2010, 18:42
Hola flony, gracias por responder.

Ya pense en algo parecido al codigo que has puesto, meter en una variable el archivo (ya que es todo una sola linea) y luego extraer el numero correspondiente.

Pero al intentar introducir el texto del archivo en una variable:

Código:
<"manga.txt" set /p "a="

Y hacer el corerspondiente echo dice lo siguiente: "No se esperaba < en este momento"

Eso debe ser que hay caracteres de redireccion (< y >) y por eso no me funciona bien. Pero aun asi probare el codigo que has puesto.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: flony en 30 Agosto 2010, 20:19
fijate no es de genio  :P esta en el tutorial de leo aca en esta pagina...como introducir un renglon como variable...pero bue con un for seria mas seguro por las dudas tenga mas de 100 capitulos


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: BlacKGilgamesH en 30 Agosto 2010, 22:45
Hola flony, gracias por responder.

Ya pense en algo parecido al codigo que has puesto, meter en una variable el archivo (ya que es todo una sola linea) y luego extraer el numero correspondiente.

Pero al intentar introducir el texto del archivo en una variable:

Código:
<"manga.txt" set /p "a="

Y hacer el corerspondiente echo dice lo siguiente: "No se esperaba < en este momento"

Eso debe ser que hay caracteres de redireccion (< y >) y por eso no me funciona bien. Pero aun asi probare el codigo que has puesto.


Para poner el archivo de texto en la variable se haria asi:

Código:
for /f %%a in (archivo.txt) do (
set arch=%%a
)
echo %arch%
pause>nul

Saludos


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Hekaly en 1 Septiembre 2010, 02:10
Buenas a todos. Ya he encontrado una forma de hacerlo, puede que no la mas facil o mas corta pero si es valida.

Como tengo varios comandos linux para windows he estado pensando y he usado el comando awk.

Así poniendo

Código:
awk "{print $38}" manga.txt | cut -d "=" -f 5 | cut -d "&" -f 1

Lo malo de esto seria que solo funcionaria si la linea fuera de la misma longitud pero para solucionarlo uso el comando wc (tambien para version windows)

Código:
wc -w manga.txt | awk "{print $1}"

Saca el numero de palabras, siendo este numero el que se nesesita para el awk de arriba y asi sacar el susodicho numero.



Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: flony en 9 Noviembre 2010, 19:37
hola leo hay una pregunta que siempre me hago y es que el delims en for delimita "hasta ahi" y me pregunto hay una forma de si yo se el limite saber "despues de" ese limite...ojala haya quedado claro la pregunta  :silbar:


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 10 Noviembre 2010, 03:50
No, no te he entendido, por favor, coloca un ejemplo.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: flony en 10 Noviembre 2010, 12:18
hola leo tendria una forma parecida a esto
Citar
hola"como_estas
yo_aca_al"pp
pero_queria-saber"de_vos
pero_en_este_renglon_es_no
xq_no_hay_comillas
quiero q tome despues de las comillas...
resultado
Citar
como_estas
pp
de_vos
o sea usar las comillas como el denominador comun en los renglones y tomar desde ahi en adelante
jijiji es una duda que siempre tuve xq bat me obliga pensar mas o menos asi
1)buscar comillas 2)tomar lo anterior y del 3)renglon sacar por diferencia lo que quiero
Citar
(hola"comoestas)-(hola)=(comoestas)


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 10 Noviembre 2010, 17:11
Con las comillas creo recordar que dará error, creo que ya se habló aquí de un bug en el comando FOR, así que primero debes cambiar ese caracter por otro y hacer el proceso.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: flony en 10 Noviembre 2010, 23:59
y si fuera otro caracter pr ejemplo un punto (.)
tipo
Citar
hola.txt
chau.dll
sip.zips


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 11 Noviembre 2010, 04:32
Has probado:

Código
  1. for /f "delims=. tokens=*" %%_ in (...)
  2.  


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: flony en 11 Noviembre 2010, 15:13
ok


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 11 Noviembre 2010, 16:37
¿funciona?


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: flony en 11 Noviembre 2010, 20:52
leo si se lo de delims....pero mi pregunta es
Citar
murcielago.batman
si uso for /f "delims=. tokens=*" in(etc...
va a tomar para realizar la accion hasta murcielago...yo lo que quiero es tomar batman
para adelante?


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 11 Noviembre 2010, 21:55
Código
  1. @echo off
  2. for /f "tokens=1* delims=." %%a in ('echo "elefante. perro gato alguien"') do (
  3. echo %%b
  4. )
  5.  


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: flony en 12 Noviembre 2010, 01:12
claro pero en el code define con el tokens y con eso perfeccionas la busqueda....si fuera dos renglones y el punto en el segundo renglon se hubica en el tokens 2?
Citar
elefante. perro gato alguien
elefante perro. gato alguien
haber aclaro para no molestar poder se puede seria el pseudocodigo asi
1*contar los string
2*"tokens=* delims=."
con esto tomo todo el renglon hasta el punto
3*por diferencia eliminar los primeros string hasta el punto
4*el resultado quedan los restantes despues del punto
en nuestro ejemplo
1°renglon
Citar
perro gato alguien
2°renglon
Citar
gato alguien

mi pregunta no hay una forma mas corta de hacerlo?
 :P gracias por tenerme paciencia  ;)


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 12 Noviembre 2010, 04:20
claro pero en el code define con el tokens y con eso perfeccionas la busqueda....si fuera dos renglones y el punto en el segundo renglon se hubica en el tokens 2?
Citar
elefante. perro gato alguien
elefante perro. gato alguien
haber aclaro para no molestar poder se puede seria el pseudocodigo asi
1*contar los string
2*"tokens=* delims=."
con esto tomo todo el renglon hasta el punto
3*por diferencia eliminar los primeros string hasta el punto
4*el resultado quedan los restantes despues del punto
en nuestro ejemplo
1°renglon
Citar
perro gato alguien
2°renglon
Citar
gato alguien

mi pregunta no hay una forma mas corta de hacerlo?
 :P gracias por tenerme paciencia  ;)

No, no hay manera automática de hacerlo, tendríamos que idear algo, o usar "sed" para Windows.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: flony en 12 Noviembre 2010, 12:23
gracias leo ....queria sacarme esa duda  ;-)


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 12 Noviembre 2010, 15:41
Utiliza dos for, uno interno y otro externo(anidados) e itera sobre cada línea, haya el token en el que está el punto.

Saludos.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: flony en 12 Noviembre 2010, 15:44
ves por eso sos un genio...no lo habia pensado
 ;-) ;-) ;-) ;-)


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: SennorDark en 4 Diciembre 2010, 17:18
Muy buenas tardes, la verdad he estado leyendo este Post, y se ve que sabes lo que haces, es factible que me puedas echar una mano, te explico mi situacion.

Necesito leer un archivo.txt cada x tiempo (esto lo realizare con una tarea programada de windows)
El archivo a leer, lo que encuentre a corde unos filtros lo creare en uno nuevo (esto lo tengo, tengo un .bat que contiene los codigos a buscar y pregunto si existe lo borro de lo contrario lon creo)

Que necesito hacer y no tengo idea de como hacerlo, es que cuando se ejecute lea las lineas que tenga y si esta el codigo que las pase al otro archivo, pero como el archivo que leo esta creciendo constantemente por otro proceso que lo llena, necesito manejar un flag que me indique la ultima lectura que hice fue en la linea xxxx y de hay empezar a leer para no realizar todo la lectura otravez

lo que tengo es lo siguiente:

Código
  1. @echo off
  2. if exist E:\LogPrueba24x7\Resultados_Logs\logs24x7.txt (goto si) else (goto no)
  3. :fin
  4.  
  5. :si
  6. del E:\LogPrueba24x7\Resultados_Logs\logs24x7.txt
  7. call codigos.bat
  8. goto fin
  9.  
  10. :no
  11. call codigos.bat
  12. goto fin
  13.  
  14.  
Como lo habia pensado, pero no se como llevarlo a un .bat
-leer el txt
-copiar lo que necesito a un new txt siendo la primera linea el numero de la ultima linea del txt
-al volver a ejecutarse leer la primera linea del new txt para saber donde empezar con la nueva lectura al txt
y asi sucesivamente

Es posible que me puedas ayudar gracias de antemano

el codigos.bat tiene lo siguiente:
Código
  1. find /i " 529 " < "LogPrueba.TXT" >> Resultados_Logs\logs24x7.txt
  2. find /i " 530 " < "LogPrueba.TXT" >> Resultados_Logs\logs24x7.txt
  3. find /i " 531 " < "LogPrueba.TXT" >> Resultados_Logs\logs24x7.txt
  4. find /i " 539 " < "LogPrueba.TXT" >> Resultados_Logs\logs24x7.txt
  5. find /i " 630 " < "LogPrueba.TXT" >> Resultados_Logs\logs24x7.txt


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 4 Diciembre 2010, 20:35
En la noche atiendo tu duda.

Saludos.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: finoguer en 22 Febrero 2011, 19:45
Hola.

Les comento mi problema, para ver si pueden ayudarme ya que yo en este tema estoy muy perdido.

Tengo un fichero texto.txt con multiples filas y  lo que quiero es quitar un número determinado de caracteres de cada fila a partir de una determinada posición dejando el resto de la fila igual, para todas las filas del archivo.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 22 Febrero 2011, 22:17
Necesito el contenido del archivo, qué es lo que quieres quitar y una salida de como quieres que quede. Ah, y que digas con qué propósito haces esto.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: finoguer en 23 Febrero 2011, 14:19
El archivo tiene lineas del siguiente tipo:
Citar
AAAAAAAAAAAAAAAAAAAA                                           BBBBB BBBBBBBB BBBBB BBBBBB B                                                          CCCCC CCC CCCCCC CCCC C C                                                                                                                                                                               DDDDDDDDDDD         EEEEEEEEE                FFFFFFFFFFF              GGGGG GGGGGGGGGGGG G G GGGGGGG GGGG                                                                                                                                                                                                                                                                                           HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH       IIIII
Todo esto es solo una linea
y quiero que  a partir de la posición 111 de la línea quite 40 caracteres y quede:
Citar
AAAAAAAAAAAAAAAAAAAA                                           BBBBB BBBBBBBB BBBBB BBBBBB B                  CCCCC CCC CCCCCC CCCC C C                                                       DDDDDDDDDDD         EEEEEEEEE                FFFFFFFFFFF              GGGGG GGGGGGGGGGGG G G GGGGGGG GGGG                                                                                                                                                                                                                                                                                           HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH       IIIII

El archivo solo tiene caracteres de texto y necesito hacer esto para que automaticamente se me pasen los datos entre 2 programas.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: ydonerlcp en 10 Marzo 2011, 16:26
Una consulta.-

Tengo el siguiente texto (texto.txt)
Citar
====================================
texto texto texto texto
texto texto texto texto texto
texto texto
texto texto 12Z17NOV2010 texto
texto texto texto texto texto texto
====================================

Lo que quiero es que me actualice diariamente la fecha en el formato que esta, sin que agregue ni quite contenido alguno del texto además el archivo quede con el mismo nombre.

Alguna sugerencia ?


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 10 Marzo 2011, 22:27
Una consulta.-

Tengo el siguiente texto (texto.txt)
Lo que quiero es que me actualice diariamente la fecha en el formato que esta, sin que agregue ni quite contenido alguno del texto además el archivo quede con el mismo nombre.

Alguna sugerencia ?

Debiste poner el archivo real, y si no puedes cambiarle por caracter cualquier, pero bueno, podemos editar solamente la línea número 5 (no has especificado si siempre se edita esa línea).

En un momento pongo mi solución.

EDITO:

Aquí está:

Código
  1. @echo off
  2. rem Sacar el mes:
  3. for /f "tokens=1,2,3 delims=/" %%a in ('date /t') do (
  4. if "%%b"=="01" set "MES=JAN";
  5. if "%%b"=="02" set "MES=FEB";
  6. if "%%b"=="03" set "MES=MAR";
  7. if "%%b"=="04" set "MES=APR";
  8. if "%%b"=="05" set "MES=MAY";
  9. if "%%b"=="06" set "MES=JUN";
  10. if "%%b"=="07" set "MES=JUL";
  11. if "%%b"=="08" set "MES=AUG";
  12. if "%%b"=="09" set "MES=SEP";
  13. if "%%b"=="10" set "MES=OCT";
  14. if "%%b"=="11" set "MES=NOV";
  15. if "%%b"=="12" set "MES=DEC";
  16. set "DIA=%%a";
  17. set "año=%%c";
  18. )
  19. sed -i "5s/\(.*\s.*\s[0-9]*[a-zA-Z]\)\(.*\)\(\s.*\)/\1%DIA%%MES%%año: =%\3/" texto.txt
  20.  

Necesitas descargar e instalar SED para windows.
http://sourceforge.net/projects/gnuwin32/files/sed/4.2.1/sed-4.2.1-setup.exe/download (http://sourceforge.net/projects/gnuwin32/files/sed/4.2.1/sed-4.2.1-setup.exe/download)

Saludos.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 10 Marzo 2011, 22:53
El archivo tiene lineas del siguiente tipo:Todo esto es solo una linea
y quiero que  a partir de la posición 111 de la línea quite 40 caracteres y quede:
El archivo solo tiene caracteres de texto y necesito hacer esto para que automaticamente se me pasen los datos entre 2 programas.

Es fácil, necesitas sed para Windows.

file.txt:

Código
  1. C:\>type file.txt
  2. AAAAAAAAAAAAAAAAAAAA                                           BBBBB BBBBBBBB BBBBB BBBBBB B
  3.                         CCCCC CCC CCCCCC CCCC C C
  4.                                                                                                    DDDDDDDDDDD         EEEEE
  5. EEEE                FFFFFFFFFFF              GGGGG GGGGGGGGGGGG G G GGGGGGG GGGG
  6.  
  7.                                                                                                                 HHHHHHHHHHHH
  8. HHHHHHHHHHHHHHHHHHHHHHHHHHHHH       IIIII
  9.  
  10. C:\>

Y con esta línea haces el trabajo:
Código
  1. sed -i "s/^\(.\{111\}\).\{40\}\(.*\)$/\1\2/" file.txt


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: ydonerlcp en 10 Marzo 2011, 23:49
Estimado Leo Gutiérrez.-
Quiero agradecerle de antemano por la ayuda  que me ha brindado, probé el codigo y es exactamente lo que quiero, solo un detalle:

El archivo (texto.txt) se edita diariamente de manera que se mantiene actualizado la fecha en el archivo (texto.txt);

al ejecutar el batch debe actualizarse automáticamente la fecha en el (texto.txt) sólo esa linea y lo demás debe quedar como estaba.

actualmente al ejecutar no guarda la fecha en mi archivo (texto.txt)

Cómo puedo hacer ?

Desde ya muy agradecido por su respuesta.



Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 11 Marzo 2011, 00:05
Estimado Leo Gutiérrez.-
Quiero agradecerle de antemano por la ayuda  que me ha brindado, probé el codigo y es exactamente lo que quiero, solo un detalle:

El archivo (texto.txt) se edita diariamente de manera que se mantiene actualizado la fecha en el archivo (texto.txt);

al ejecutar el batch debe actualizarse automáticamente la fecha en el (texto.txt) sólo esa linea y lo demás debe quedar como estaba.

Desde ya muy agradecido por su respuesta.



Disculpa, no he entendido bien qué es lo que quieres o  qué hay que hacer, si pudieras ser un poco más claro en lo que quieres.

Saludos.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: ydonerlcp en 11 Marzo 2011, 00:18
Disculpa, no he entendido bien qué es lo que quieres o  qué hay que hacer, si pudieras ser un poco más claro en lo que quieres.

Saludos.

Discula por no ser muy claro en mi consulta:
Mi archivo (texto.txt) con contenido arriba mostrado es un archivo que debe ser actualizado diariamente pero sólo la fecha en el formato que está, manteniendo el contenido que tenia.

Ahora la solución que Ud. me ha dado cumple mi pedido el detalle esta en:

- Al ejecutar el batch quiero que actualice el archivo (texto.txt) con el contenido que tenía pero con la fecha ya actualizada; de manera que al abrir el archivo (texto.txt) me muestre el contenido con la fecha actual del sistema.

- El codigo que me envió, me muestra en la ventana de DOS todo el contenido del texto con fecha actualizada hasta ahi PERFECTO;  PERO al terminar de ejecutar mi batch lo cierro y vuelvo a abrir mi archivo de texto pára ver si se actualizó mi fecha o no y no veo que la fecha se haya actualizado; en otras otras palabras no guarda la fecha modificada.

Por favor .... muchas gracias por su ayuda.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 11 Marzo 2011, 00:39
Ah, entiendo.

Eso es lo curioso, porque en el código está la opción -i (en la línea de SED), o sea, la opción -i (inplace) se supone que edita el archivo y ya lo deja listo. En fin, vamos a hacer esto:
Citar
C:\>type texto.txt
====================================
texto texto texto texto
texto texto texto texto texto
texto texto
texto texto 12Z17NOV2010 texto
texto texto texto texto texto texto
====================================

C:\>dudas.bat
        1 archivos copiados.

C:\>type texto.txt
====================================
texto texto texto texto
texto texto texto texto texto
texto texto
texto texto 12Z10MAR2011 texto
texto texto texto texto texto texto
====================================

C:\>

Código
  1. @echo off
  2. rem Sacar el mes:
  3. for /f "tokens=1,2,3 delims=/" %%a in ('date /t') do (
  4. if "%%b"=="01" set "MES=JAN";
  5. if "%%b"=="02" set "MES=FEB";
  6. if "%%b"=="03" set "MES=MAR";
  7. if "%%b"=="04" set "MES=APR";
  8. if "%%b"=="05" set "MES=MAY";
  9. if "%%b"=="06" set "MES=JUN";
  10. if "%%b"=="07" set "MES=JUL";
  11. if "%%b"=="08" set "MES=AUG";
  12. if "%%b"=="09" set "MES=SEP";
  13. if "%%b"=="10" set "MES=OCT";
  14. if "%%b"=="11" set "MES=NOV";
  15. if "%%b"=="12" set "MES=DEC";
  16. set "DIA=%%a";
  17. set "año=%%c";
  18. )
  19. sed "5s/\(.*\s.*\s[0-9]*[a-zA-Z]\)\(.*\)\(\s.*\)/\1%DIA%%MES%%año: =%\3/" texto.txt > tmp.txt
  20. copy /y "tmp.txt" "texto.txt"
  21. del /f /q "tmp.txt"
  22. exit /b 0

Y la pregunta obligatoria, ¿para qué haces este proceso?, ¿cuál es el fin?


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: ydonerlcp en 11 Marzo 2011, 00:57

Muchisímas gracias amigo Leo Gutiérrez; todo funciona perfectamente como quería.

Estoy automatizando procesos y para que todo funcione era muy necesario un simple archivo de txt con fecha actualizado de manera que al leer la fecha actual pueda ejecutar automáticamente otras solicitudes que un usuario necesite.

Dios te bendiga amigo Gutierrez, una vez mas gracias por tu ayuda, ánimos y que los éxitos  continúen.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 11 Marzo 2011, 00:58
Igualmente, saludos.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: finoguer en 14 Marzo 2011, 09:35
Leo, muchas gracias por tu ayuda, hace exactamente lo que quería.

Un saludo.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: wigo69 en 6 Julio 2011, 23:09
Disculpa leo lo que sucede es que estamos haciendo un trabajo y toda la información que subiste nos ha servido muchísimo pero aun así no logramos terminar el texto mi pregunta es la siguiente como puedo dividir un archivo txt en dos sub archivos que contengan cada uno la mitad de la lineas de código de txt general

por ejemplo tengo un texto.txt de 1000 lineas de código
deseo que se creen dos sub texto.txt  el 1 y el 2 que contengan 500 lineas de código

1 texto.txt = 0-499
2 texto.txt = 500- 1000
ojala nos puedas ayudar de antemano muchísimas gracias

aca esta el enunciado

a) Retorne al standar output el numero de lineas original de el archivo
b) Retorne al standar output la cantidad de lineas en donde aparece la
palabra "version" sin importar si es en mayusculas o minusculas
c) Cambie todas las ocurrencias de la palabra "Version" por "VERSION" en
todo el archivo
d) Elimine las lineas en blanco del archivo
e) Retorne al standar output el nuevo numero de lineas del el archivo
f) Dividir el archivo en 2 archivos con el mismo taman~o (o con diferencia
minima) indicando el nombre de los archivos generados
g) Comprimir el archivo original (con los cambios indicados) y darle el
siguiente nombre: original.yyy-mm-dd.txt donde yyyy-mm-dd es la fecha
actual

es el f) dividir

cuídate y muchas gracias :)


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 6 Julio 2011, 23:37
¿En dónde te han encargado hacer esto?

Código
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f %%_ in ('type file.txt ^| find /v /c ""') do set /a n_lines=%%_, medio=n_lines / 2
  4. set i=0
  5. for /f "tokens=*" %%_ in (file.txt) do (
  6. set /a i+=1
  7. if !i! leq !medio! (echo %%_ >> temp1.txt) else (echo %%_ >> temp2.txt)
  8. )

El resultado se guarda en temp1.txt y el otro en temp2.txt.

Saludos.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: wigo69 en 6 Julio 2011, 23:43
muchas gracias, esto me lo pidieron en la u para un trabajo pero no sabiamos mucho, cosas vagas y hemos ido aprendiendo mediante tu post :)


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 7 Julio 2011, 00:01
Mmmm, no sabía que les enseñaban Batch en la universidad.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: wigo69 en 7 Julio 2011, 00:04
disculpa que te moleste denuevo lo que sucede es que ise un texto llamado texto1.txt
tiene 10 lineas 5 son de letras y 5 de numeros
al compilar el codigo y cambiando file por texto1.txt cuando ejecuto no me pesca no se si debo cambiar algunos otros parametros

Código
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f %%_ in ('type texto1.txt ^| find /v /c ""') do set /a n_lines=%%_, medio=n_lines / 2
  4. set i=0
  5. for /f "tokens=*" %%_ in (texto1.txt) do (
  6. set /a i+=1
  7. if !i! leq !medio! (echo %%_ >> temp1.txt) else (echo %%_ >> temp2.txt)
  8. )
  9.  
asi lo deje solo cambie el file
muchas gracias por tu respuesta y disculpa las molestias


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: wigo69 en 7 Julio 2011, 00:07
es un profesor de Sistema operativo xD que no nos ise certamen 3 por tiempo y nos dio un trabajo pero sin saber que no sabiamos casi nada yo por ejemplo nada y nos dio tiempo hasta el viernes, no necesito nota pero la idea no es sacarse un 1 y de pasadita aprender xD

gracias por tu ayuda :)


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: wigo69 en 7 Julio 2011, 00:19
disculpa mi pregunta funciona y super bien muchisimas gracias por tu ayuda :) ahora estare actualizando y viendo esta pagina no la conocia y es super buena, de verdad muchas gracias por tu tiempo :)

adios cuidate mxo :)


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 7 Julio 2011, 00:21
Estás haciéndolo bien.

Código
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f %%_ in ('type file.txt ^| find /v /c ""') do set /a n_lines=%%_, medio=n_lines / 2
  4. set i=0
  5. for /f "tokens=*" %%_ in (file.txt) do (
  6. set /a i+=1
  7. if !i! leq !medio! (echo %%_ >> temp1.txt) else (echo %%_ >> temp2.txt)
  8. )

file.txt tiene las líneas que quieres dividir.

La primera mitad la tiene "temp1.txt", la segunda "temp2.txt".

Tienes que tener en cuenta en que el script agrega siempre, así que a cada corrida del script tiene que borrar antes temp1.txt y temp2.txt ya que siempre estará agregando. Pruebalo y me cuentas.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: wigo69 en 7 Julio 2011, 00:23
si si funciono super bien fue por que ando matando moscas xD muchísimas gracias por todo de verdad no conocía esto y realmente me gusto estaré visitando esta pagina para actualizar mi conocimiento.

agradezco mucho tu tiempo.

cuídate mucho y que dios te Bendiga


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: PTT69 en 7 Julio 2011, 02:55
Hola leo, tengo una duda que no pude solucionar con los codigos
de la primera página

cómo puedo hacer que cambie "una" sola palabra a mayuscula y no todo
el texto?

ejemplo

"La depresión es la forma mas común del sufrimiento mental. Que es la depresión? Los test para la depresión causante de serios problemas"

cambiemos depresión

"La DEPRESION es la forma mas común del sufrimiento mental. Que es la DEPRESION? Los test para la DEPRESION causante de serios problemas"

Cuando hago esto:

 :silbar:

Código
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=* delims=" %%x in ('type texto.txt') do (
  4. set linea=%%x
  5. set linea=!linea:depresión=DEPRESION!
  6. call :show !linea!
  7. )
  8. goto:eof
  9. :show
  10. echo %* >> out.txt
  11. goto:eof
  12.  
no me deja pasar al codigo
 :¬¬

Código
  1. @echo off
  2. echo Palabra depresión Sale:
  3. type texto.txt | find /i /c "depresión"
  4.  

para contar la cantidad

Si me puedes ayudar porfavor, de antemano muchas gracias  :rolleyes:


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: PTT69 en 7 Julio 2011, 03:19
lo deje asi:

Código
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=* delims=" %%x in ('type texto.txt') do (
  4. set linea=%%x
  5. set linea=!linea:depresión=DEPRESION!
  6. call :show !linea!
  7. )
  8. goto:eof
  9. :show
  10. echo %* >> out.txt
  11.  
@echo off
echo Palabra depresión Sale:
type texto.txt | find /i /c "depresión"
pause
goto:eof

y me sale :

palabra depresion sale:  :o
0
presione una tecla.....
palabra depresion sale:  :¬¬
2
presione una tecla......

como hacerlo sin goto:eof, esto está fallando  :-\


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: SuperDraco en 7 Julio 2011, 04:25
lo deje asi:

@echo off
setlocal enabledelayedexpansion
for /f "tokens=* delims=" %%x in ('type texto.txt') do (
set linea=%%x
set linea=!linea:depresión=DEPRESION!
call :show !linea!
)
goto:eof
:show
echo %* >> out.txt

@echo off
echo Palabra depresión Sale:
type texto.txt | find /i /c "depresión"
pause
goto:eof

y me sale :

palabra depresion sale:  :o
0
presione una tecla.....
palabra depresion sale:  :¬¬
2
presione una tecla......

como hacerlo sin goto:eof, esto está fallando  :-\

Como hacer sin goto:eof, ¿El que?

No se porque dices que no funciona?


Código
  1. @echo off
  2. setlocal enabledelayedexpansion
  3.  
  4.  
  5. REM Visita Foro.ElHacker.Net
  6.  
  7.  
  8. echo Palabra "Depresi¢n" Sale:
  9. type texto.txt | find /i /c "depresión"
  10.  
  11. for /f "Tokens=*" %%a in ('type texto.txt') do (
  12. set linea=%%a
  13. set linea=!linea:depresión=DEPRESION!
  14. call :show !linea!
  15. )
  16.  
  17.  
  18. :show
  19. echo %* >> out.txt
  20. goto:eof

Lowerit.exe - Convierte texto a minúsculas.

Upperit - Convierte texto a MAYÚSCULAS.


http://foro.elhacker.net/scripting/batch_packs_de_aplicaciones_varias_commandlineinterface_actualizado_05mayo-t322976.0.html


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 7 Julio 2011, 07:29
El código de pitoloko funciona, lo he probdo.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: PTT69 en 7 Julio 2011, 19:38
A mi no me funciona, me dice depresión sale 2 y en verdad son 3
pero en fin, a lo que voy es que la idea es hacer el mayúscula en primer lugar, después de ese código hacer el resto, me explico:

Primero la mayúscula:  :silbar:
Código:
@echo off
setlocal enabledelayedexpansion
for /f "Tokens=*" %%a in ('type texto.txt') do (
set linea=%%a
set linea=!linea:depresión=DEPRESION!
call :show !linea!
)
pause >nul
:show
echo %* >> out.txt
goto:eof
Seguir con el contar Lineas ::)
Código:
@echo off
echo Total de Lineas:
type out.txt | find /v /c "" < out.txt
pause
Y terminar con cantidad de palabra DEPRESION  :o
Código:
@echo off
echo Palabra depresion Sale:
type out.txt | find /i /c "DEPRESION"

pause
Gracias Pitoloko, pero no me funk  :rolleyes:

primero me cuenta la palabra, sale 2, son 3, y despues me cambia a mayus, la idea es hacer lo contrario, primero la mayus, y seguir con los codigos hacia abajo.

alguna idea?  :-\


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 7 Julio 2011, 19:48
Código:
type out.txt | find /v /c "" < out.txt


Eso está mal, debería ser así:
Código
  1. type out.txt | find /v /c ""


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: PTT69 en 7 Julio 2011, 20:09
Así esta la cosa

(http://www.imagengratis.org/images/1di8dd.jpg)

Borré lo que me dijiste
Lo ejecuto y me sale nada:

(http://www.imagengratis.org/images/2ek6re.png)

Después aprieto Enter y se cierra, y tambien genera el archivo out.txt
donde me cambia a mayus y borra los saltos de línea

(http://www.imagengratis.org/images/3lu5ol.png)

La idea no es cambiar el orden de los códigos, ese es el drama  :-\


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: SuperDraco en 8 Julio 2011, 06:19
el código que te dije yo si que funciona al decir cuantas palabras "depresión" encuentra, pero ten en cuenta que si alguna NO tiene acento en la "ó" pues obviamente entonces esa no la va a contar.

saludos


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 8 Julio 2011, 06:49
El error debe estar en el manejo del acento.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: PTT69 en 8 Julio 2011, 10:00
jajaja no me entienden la pregunta...  :-[

tonce busquen la palabra la, si da igual eso, a lo que voy
es que me tome todo el código, todo, es decir, termina de buscar
la palabra "X" y pasa a la siguiente función....

el problema es pasar a la siguiente función sin error  :-\


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 8 Julio 2011, 17:39
A ver así:

Código
  1. @echo off
  2. setlocal enabledelayedexpansion
  3.  
  4. rem Puedes cambir texto.txt por el archivo que quieras.
  5.  
  6. for /f "Tokens=*" %%a in ('type texto.txt') do (
  7. set linea=%%a
  8. set linea=!linea:depresión=DEPRESION!
  9. call :show !linea!
  10. )
  11.  
  12. goto:lineas
  13.  
  14. :show
  15. echo %*
  16. goto:eof
  17.  
  18. :lineas
  19. echo Total lineas:
  20. type .\texto.txt | find /v /c ""
  21.  
  22. :repetido
  23. echo Palabra "Depresi¢n" Sale:
  24. type texto.txt | find /i /c "depresión"


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: wigo69 en 8 Julio 2011, 17:40
ola leo te escribo por que tengo un problema tengo el codigo final con todos los pasos pero cuando quiero partir el texto inicial en dos me crea 2 subtextos con mas codigo del debido por ejemplo tengo texto1.txt con 10 lineas de codigo y deceo partilas en 2 de 5 lineas como te dije pero me crea dos subtextos con 20 lineas cada uno xD te muestro mi codigo final


Código
  1. 7za.exe a -tzip original.%date:~-4,4%%date:~-7,2%%date:~0,2%.txt.zip -mx9 -r  texto.txt
  2. echo se ha guardado un archivo comprimido
  3.  
  4. @echo off
  5.  
  6. setlocal enabledelayedexpansion
  7. echo Codigo Rene toledo flores y Alexis Maureira s. Hackers
  8.  
  9. echo Cantidad de lineas totales:
  10. type texto.txt | find /v /c "" < texto.txt
  11.  
  12. echo Lineas donde se encuentra version
  13. type texto.txt | find /i /c "version"
  14.  
  15.  
  16.  
  17. for /f "tokens=* delims=" %%x in (texto.txt) do (
  18. set linea=%%x
  19. set linea=!linea:version=VERSION!
  20. call :show !linea!
  21. )
  22. echo se a generado uno texto  y la Version ha sido cambiada y lineas en blanco eliminadas:
  23.  
  24.  
  25.  
  26. echo Cantidad de lineas totales:
  27. type textomodificado.txt | find /v /c "" < textomodificado.txt
  28.  
  29.  
  30. goto:eof
  31. :show
  32. echo %* >> textomodificado.txt
  33.  
  34.  
  35.  
  36. for /f %%_ in ('type textomodificado.txt ^| find /v /c ""') do set /a n_lines=%%_, medio=n_lines / 2
  37. set i=0
  38. for /f "tokens=*" %%_ in (textomodificado.txt) do (
  39. set /a i+=1
  40. if !i! leq !medio! (echo %%_ >> parte1.txt) else (echo %%_ >> parte2.txt)
  41. )
  42.  
  43.  
  44. goto:eof

muchas gracias de antemano


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 8 Julio 2011, 17:45
Coloquen el contenido de los archivos de texto que están usando.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: wigo69 en 8 Julio 2011, 17:48
texto.txt
asdasd
asdasd
asdsad
asdsad
asdsad
11111
22222
33333
44444
55555


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 8 Julio 2011, 21:34
A ver, veamos, hagamos la prueba con el siguiente texto.txt:

Citar
asdasd
asdasd
asdsad
asdsad
asdsad
11111
22222
33333
44444
55555
version

Hay que cambiar "version" por "VERSION".

Usando el siguiente código:
Código
  1. @echo off
  2.  
  3. setlocal enabledelayedexpansion
  4. echo Codigo Rene toledo flores y Alexis Maureira s. Hackers
  5.  
  6. echo Cantidad de lineas totales:
  7. type texto.txt | find /v /c ""
  8.  
  9. echo Lineas donde se encuentra version
  10. type texto.txt | find /i /c "version"
  11.  
  12. for /f "tokens=* delims=" %%x in (texto.txt) do (
  13. set linea=%%x
  14. set linea=!linea:version=VERSION!
  15. call :show !linea!
  16. )
  17. echo Se a generado uno texto  y la Version ha sido cambiada y lineas en blanco eliminadas:
  18.  
  19. echo Cantidad de lineas totales:
  20. type textomodificado.txt | find /v /c ""
  21.  
  22. goto:dividir
  23.  
  24. :show
  25. echo %* >> textomodificado.txt
  26. goto:eof
  27.  
  28. :dividir
  29. for /f %%_ in ('type textomodificado.txt ^| find /v /c ""') do set /a n_lines=%%_, medio=n_lines / 2
  30. set i=0
  31. for /f "tokens=*" %%_ in (textomodificado.txt) do (
  32. set /a i+=1
  33. if !i! leq !medio! (echo %%_ >> parte1.txt) else (echo %%_ >> parte2.txt)
  34. )
  35. exit /b 0

Nos da el siguiente resultado:

Código:
Codigo Rene toledo flores y Alexis Maureira s. Hackers
Cantidad de lineas totales:
11
Lineas donde se encuentra version
1
Se a generado uno texto  y la Version ha sido cambiada y lineas en blanco elimin
adas:
Cantidad de lineas totales:
11

textomodificado.txt:

Código:
asdasd
asdasd
asdsad
asdsad
asdsad
11111
22222
33333
44444
55555
VERSION

parte1.txt

Código:
asdasd 
asdasd 
asdsad 
asdsad 
asdsad 

parte2.txt

Código:
11111 
22222 
33333 
44444 
55555 
VERSION 

Listo, funciona.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: oloco en 20 Julio 2011, 21:32
Hola a tod@s.
Llevo días dándole vueltas a un problema con un script y he visto este post. Lo he leido enteramente y he visto cosas muy interesantes, pero nada que se asemeje a mi problema:
Utilizo sqlcmd para consultar una tabla llamada familia en una BD SQL, y el resultado lo redirecciono a un fichero de texto llamado familia.txt
este es el formato que me devuelve:

Código:
szfamilyname      
--------------------
HMAR          
HTERESA
HLUZ                

(3 rows affected)

(todos los nombres que me interesan empezarán por H)
Con el comando findstr /I "H" familia.txt > contador.txt puedo sacar la información que me importa al fichero contador.txt

Bien. El problema es que hay muchas bases de datos, y cada una de ellas me devuelve un número diferente de valores, aunque todos los nombres empiezan por H también. Por ejemplo, si consulto la misma tabla szfamilyname en otra BBDD, el resultado podría ser:

Código:
szfamilyname      
--------------------
HEMILIO            
HRODRIGO
HCARMEN
HLORENA            

(4 rows affected)

Lo que me interesa es poder crear un script de forma tal que cada vez que consulto la tabla en cualquier base de datos, me cree una variable cuyo contenido sea el nombre de cada valor que devuelve. Lo complicado de todo esto, es que el número de valores puede variar en cada BBDD, por lo que seguramente tenga que crear algún tipo de contador que lea las lineas del fichero contador.txt y de alguna forma cree una variable con el nombre que aparece en cada linea (sean cuantas sean las lineas). ´
Estoy seguro de que me he expresado bastante mal, así que voy a tratar de exponerlo de una forma más amena con un ejemplo:

Mi aplicación necesita consultar el libro de familia (la BBDD) para poder acceder a la información del número de hij@s que hay (tabla szfamilyname). Con cada nombre existente en cada lista que dicha tabla me reporte, quiero crear una variable para más tarde poder operar con ella (estaría genial poder llamar a cada variable con el mismo nombre que su propio valor, pero eso es lo de menos)

Hasta el momento no me había encontrado con ningún problema similar (he tenido que utilizar un código sacado de aquí para poder contar el número de lineas que tiene un fichero y después operar con él), pero creo que aquí el kid del problema es cómo hacer para que, independientemente del número de "hij@s" que exista, se cree una variable con su nombre.

Espero entre tod@s podais ayudarme.
Un saludo, y mil gracias por adelantado!!!

P.D por cierto, si pensais que existe otra manera diferente y más sencilla de hacer lo que necesito sin tener que usar ficheros de texto, sentiros en libertad de cambiar mi post a otro sitio.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 20 Julio 2011, 22:01
En un rato checo tu duda.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: oloco en 21 Julio 2011, 01:37
Vale Leo. Gracias!


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 21 Julio 2011, 08:29
Bueno, a ver si he entendido, tu haces una consulta SQL la cual te devuelve los valores que comienzan con H y eso lo volcas a un archivo familia.txt...

Ahí hay que trabajar el archivo para que cada valor(ejemplo):

HEMILIO            
HRODRIGO
HCARMEN
HLORENA            

lo meta en una variable independiente, bueno, si he entendido bien, podríamos trabajar con un array:

Código:
@echo off
setlocal enabledelayedexpansion
set /a contador=0

rem "familia.txt" es el archivo conteniendo el resultado de la consulta:
rem szfamilyname
rem --------------------
rem HMAR
rem HTERESA
rem HLUZ

rem (3 rows affected)

for /f "tokens=*" %%_ in ('findstr /r ^H.*$ familia.txt') do (
set query[!contador!]=%%_
set /a contador+=1
)
echo No. de valores: !contador!

rem Los valores son guardados en el array "query".
rem Para mostrar los valores del array:
rem Primera posición:
echo !query[0]!
rem Segunda posición:
echo !query[1]!
rem Tercera posición:
echo !query[2]!
rem Y así consecutivamente...
rem Solo estoy mostrando hasta el 3, claro que puede haber muchos más.
pause

He comentado un poco el código para que lo entiendas mejor, sino cualquier duda la aclaramos.

Tomando el archivo familia.txt con:

Código:
C:\Users\leo>type familia.txt
szfamilyname
--------------------
HEMILIO
HRODRIGO
HCARMEN
HLORENA

(4 rows affected)
C:\Users\leo>

El código devuelve:

Código:
C:\Users\leo>code.cmd
No. de valores: 4
HEMILIO
HRODRIGO
HCARMEN

C:\Users\leo>
Lo cual es correcto.

Ahora, si quisieramos mostrar todos los valores:

Código:
@echo off
setlocal enabledelayedexpansion
set /a contador=0

for /f "tokens=*" %%_ in ('findstr /r ^H.*$ familia.txt') do (
set query[!contador!]=%%_
set /a contador+=1
)
echo No. de valores: !contador!

rem Los valores son guardados en el array "query".
rem Para mostrar los valores del array:
rem Primera posición:
echo !query[0]!
rem Segunda posición:
echo !query[1]!
rem Tercera posición:
echo !query[2]!
rem Y así consecutivamente...
echo.
echo Todos los valores son:
set /a contador-=1
for /l %%_ in (0,1,!contador!) do (
echo !query[%%_]!
)
pause

¿Me queda una duda, para qué utilizas Batch?, en el trabajo?, universidad?


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: oloco en 21 Julio 2011, 18:37
Hola de nuevo, Leo!
Verás, después de haber expuesto mi duda seguí investigando. He de decir que el ejemplo expuesto no es real. Con esto quiero decir que los datos obtenidos no son nombres de persona, sinó nombres de equipos (el ejemplo lo puse para tratar de hacerme entender mejor, pero pienso que fue un error).
El equipo con la base de datos al que se hace la consulta es un servidor, y los resultados obtenidos son los equipos que a él se conectan.
Una vez tenemos los datos, necesito hacer operaciones con ellos, como por ejemplo un ping, para obtener su IP y revisar que todos tengan conectividad y la misma máscara de subred... por ejemplo. Todo esto quisiera que se hiciese de forma automatizada, por ese motivo la importancia de tener una forma fácil de acceder a las variables.
Resumiendo: Mi script se conecta mediante psexec al servidor, hace la consulta sql y guarda los resultados a un fichero.
Ahora gracias a tu ayuda, puedo tener un contador que me indica cuantos resultados hay.
Sin embargo, sigo sin ver una forma de poder realizar operaciones con los equipos clientes, dado que su número es variable según el servidor al que se consulte.
Si siempre tuviese 2 clientes, en el script llamaría siempre a dos variables, con lo que se acaba el problema. Pero en mi caso, el script tiene que llamar a x variables:



Código
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /a contador=0
  4.  
  5. rem "familia.txt" es el archivo conteniendo el resultado de la consulta:
  6. rem szfamilyname
  7. rem --------------------
  8. rem HMAR
  9. rem HTERESA
  10. rem HLUZ
  11.  
  12. rem (3 rows affected)
  13.  
  14. for /f "tokens=*" %%_ in ('findstr /r ^H.*$ familia.txt') do (
  15. set query[!contador!]=%%_
  16. set /a contador+=1
  17. )
  18. echo No. de valores: !contador!
  19.  
  20. rem Los valores son guardados en el array "query".
  21. rem Para mostrar los valores del array:
  22. rem Primera posicion:
  23. echo !query[0]!
  24. rem Segunda posicion:
  25. echo !query[1]!
  26. rem Tercera posicion:
  27. echo !query[2]!
  28. rem Y así consecutivamente...
  29. rem Solo estoy mostrando hasta el 3, claro que puede haber muchos mas.
  30. pause
  31.  
Aqui está mi problema. Si tuviese siempre tres resultados, pondría el código tal cual has expuesto, pero como los resultados pueden ser desde 1 hasta 12, no se muy bien como planteármelo para poder crear una orden de ping (entre otras) por cada uno de ellos.

Ante todo quiero agradecerte toda la ayuda que me estás brindando.
Espero puedas entender lo que intento explicarte, pues soy consciente de que esto no se me da demasiado bien y quizas estoy pasando cosas por alto.

Me mantengo a la espera.

Un abrazo!!

P.D Por cierto, respondiendo a tu pregunta. Este script lo utilizo para mi trabajo, y utilizo cmd pues los equipos a los que nos tenemos que conectar utilizan Windows XP o 2003, tienen unas directivas de seguridad elevadas y no tenemos permiso para utilizar utilidades de terceros.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 21 Julio 2011, 20:30
Al utilizar un array, tienes total control sobre todos los valores sabiendo el número de ellos, es decir, en mi último script:

Código:
@echo off
setlocal enabledelayedexpansion
set /a contador=0

for /f "tokens=*" %%_ in ('findstr /r ^H.*$ familia.txt') do (
set query[!contador!]=%%_
set /a contador+=1
)
echo No. de valores: !contador!

rem Los valores son guardados en el array "query".
rem Para mostrar los valores del array:
rem Primera posición:
echo !query[0]!
rem Segunda posición:
echo !query[1]!
rem Tercera posición:
echo !query[2]!
rem Y así consecutivamente...
echo.
echo Todos los valores son:
set /a contador-=1
for /l %%_ in (0,1,!contador!) do (
echo !query[%%_]!
)
pause

Suponiendo que los valores fueran máquinas y yo quisiera saber cuales de ellas están online u offline:

Código:
@echo off
setlocal enabledelayedexpansion
set /a contador=0

for /f "tokens=*" %%_ in ('findstr /r ^H.*$ familia.txt') do (
set query[!contador!]=%%_
set /a contador+=1
)
echo No. de valores: !contador!
echo Todos los valores son:
set /a contador-=1
for /l %%_ in (0,1,!contador!) do (
ping -n 4 !query[%%_]! > nul 2>&1 && (
echo Máquina !query[%%_]! - online
) || (
echo Máquina !query[%%_]! - offline
)
)
pause
Código:
!query! es el array, si yo quiero acceder a la posición x:
!query[x]!
Saludos, cualquier duda nos dices.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: oloco en 21 Julio 2011, 20:57
Hola Leo.
Pienso que más o menos me va quedando algo más claro. Lo cierto es que me resulta bastante complejo, pero con ganas de aprender (además en mi trabajo me resultará muy util).
He ejecutado el código que has creado, y funciona correctamente menos en un punto. En este equipo tengo sólo dos clientes (debería reportar dos equipos asociados a este servidor), pero cuando ejecuto la parte del código que realiza el ping a cada uno de los valores del array, tambien lo realiza a un "equipo" cuyo valor es nulo.

Código
  1. Maquina H111            - online
  2. Maquina H112            - offline
  3. Maquina  - offline
  4. Press any key to continue . . .
  5.  

Me doy cuenta de que ese tercer valor es el que corresponde con !contador! dentro del código.
¿Alguna sugerencia?
Gracias!


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 21 Julio 2011, 21:16
¿Puedo ver la tabla o el archivo de texto que usas cuando da error?


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: oloco en 21 Julio 2011, 21:42
Por supuesto. Este es el fichero temp.txt (en el que se graban los equipos):
Código:
szcomputername     
--------------------
H111
H112         

(2 rows affected)

y esto es el código que tengo en el script:
Código
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /a contador=0
  4.  
  5. for /f "tokens=*" %%_ in ('findstr /r ^H.*$ temp.txt') do (
  6. set query[!contador!]=%%_
  7. set /a contador+=1
  8. )
  9. echo No. de valores: !contador!
  10.  
  11.  
  12.  
  13. echo REVISION DE LA SUBRED EN EL CONJUNTO DE CAJAS
  14.  
  15.  
  16. for /l %%_ in (0,1,!contador!) do (
  17. ping -n 1 !query[%%_]! > nul 2>&1 && (
  18. echo Maquina !query[%%_]! - online
  19. ) || (
  20. echo Maquina !query[%%_]! - offline
  21. )
  22. )
  23. pause
  24.  


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 21 Julio 2011, 21:53
Sí, el problema está con la variable contador, que da un valor de más, solo hay que decrementarla y listo.

Código:
@echo off
setlocal enabledelayedexpansion
set /a contador=0
 
for /f "tokens=*" %%_ in ('findstr /r ^H.*$ temp.txt') do (
set query[!contador!]=%%_
set /a contador+=1
)
echo No. de valores: !contador!
echo REVISION DE LA SUBRED EN EL CONJUNTO DE CAJAS
rem Decrementamos la variable en una unidad.
set /a contador-=1
for /l %%_ in (0,1,!contador!) do (
ping -n 1 !query[%%_]! > nul 2>&1 && (
echo Maquina !query[%%_]! - online
) || (
echo Maquina !query[%%_]! - offline
)
)
pause


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: oloco en 21 Julio 2011, 22:04
Efectivamente Leo. Ya funciona todo correctamente.
Ahora, a partir de aquí, ya puedo seguir aumentando funciones al script para darle más funcionalidad, así que no sería extraño que vuelva a pasarme por aquí en busca de tu consejo.
Te agradezco enormemente la paciencia y tiempo gastados conmigo.

P.D Por cierto, podrías recomendarme alguna lectura, algún libro o manual para poder aprender nuevos conocimientos sobre batch?

Un saludo, y gracias por todo!!!


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 21 Julio 2011, 22:08
ss64.com (http://ss64.com) contiene ayuda sobre los comandos de Windows XP y algunos ejemplos.
robvanderwoude.com
http://www.robvanderwoude.com/batchstart.php (http://www.robvanderwoude.com/batchstart.php) también contiene mucha ayuda.
Y por supuesto este sitio, los temas pegados en esta sección.

Saludos.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: vrer en 23 Julio 2011, 22:31
y como seria para sacar el nombre de la conxion de red en algunos es Conexión de área local 2 otros Conexión de área local y otros lo configuran con un nombre personalizado o sistema operativo esta en otro idioma e intentado con for pero al ponerlo en variable no agarra los acentos y da error por nombre e tratado de sacarlo de netsh interface ip show config pero nose puede poner delimitadores "
bueno asi
netsh interface ip show config> nombre_Red.txt

quiero sakar lo q esta en comillas ya q siempre el nombre esta ahi entre las 2 comillas
en cambio en ipconfig> red.txt no se como podria funcionar ya q todo cambiaria x idioma del sistema (como el Adaptador Ethernet); tbm cambiaria el numero de letras del nombre de red si es Conexión de área local 2 o 1 o si lo cmabiaron de nombre

por eso opte por el netsh interface ip show config para el nombre de la conexion de red pero no se como sakar lo q esta en comillas del archivo de texto o de variable
Configuraci¢n para la interfaz "Conexi¢n de  rea local 2"


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 23 Julio 2011, 23:33
Teniendo como base lo siguiente:

Código:
C:\Users\leo>netsh interface show interface

Estado admin.    Estado          Tipo             Nombre interfaz
-------------------------------------------------------------------------
Habilitado     Desconectado   Dedicado         Conexión de área local
Habilitado     Conectado      Dedicado         Conexión de red inalámbrica


C:\Users\leo>netsh interface ip show config

Configuración para la interfaz "Conexión de área local"
    DHCP habilitado:                         Sí
    Métrica de interfaz:                      5
    Servidores DNS configurados a través de DHCP: ninguno
    Registrar con el sufijo:           Solo el principal
    Servidores WINS configurados a través de DHCP: ninguno

Configuración para la interfaz "Conexión de red inalámbrica"
    DHCP habilitado:                         Sí
    Dirección IP:                           192.168.1.64
    Prefijo de subred:                        192.168.1.0/24 (máscara 255.255.25
5.0)
    Puerta de enlace predeterminada:                   192.168.1.254
    Métrica de puerta de enlace:                       0
    Métrica de interfaz:                      25
    Servidores DNS configurados a través de DHCP:  192.168.1.254
    Registrar con el sufijo:           Solo el principal
    Servidores WINS configurados a través de DHCP: ninguno

Configuración para la interfaz "Loopback Pseudo-Interface 1"
    DHCP habilitado:                         No
    Dirección IP:                           127.0.0.1
    Prefijo de subred:                        127.0.0.0/8 (máscara 255.0.0.0)
    Métrica de interfaz:                      50
    Servidores DNS configurados estáticamente:   ninguno
    Registrar con el sufijo:           Solo el principal
    Servidores WINS configurados estáticamente:   ninguno


C:\Users\leo>

Se podría implementar esto:
Código
  1. @echo off
  2. for /f "tokens=3* skip=2" %%a in ('netsh interface show interface ^| findstr /R /v "^-"') do (
  3. echo %%b
  4. )
  5. for /f "tokens=4*" %%a in ('netsh interface ip show config ^| findstr /R "^Configu*"') do (
  6. echo %%b
  7. )

Por cierto, aquí se acostumbra pedir las cosas por favor, tener cortesía, no la estás teniendo, solo estás pidiendo, y otra cosa, hay que cuidar más la ortografía, estás dejando totalmente de lado los signos de puntuación.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: vrer en 24 Julio 2011, 00:45
muchas gracias leo no es que este exigiendo y que no sepa ortografia basica es que asi suelo escribir por internet pero voy a cambiar unas consultas mas sino es problema en el codigo usas el config pero si el sistema operativo esta en otro idioma y no encuentra el config, es decir el solo falta el nombre de la red para a traves del comando netsh pueda cambiar las ips dns y sin el nombre exacto me da error para eso necesitaba el nombre y si se pudiera hacer el proceso silencioso de modo que no salga nada en la pantalla del batch y guardarlo en una variable. Muchas gracias ante todo


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 24 Julio 2011, 20:18
En el código, sólo habría que setearlas dentro del ciclo for:

Código
  1. @echo off
  2. for /f "tokens=3* skip=2" %%a in ('netsh interface show interface ^| findstr /R /v "^-"') do (
  3. set conn=%%b
  4. )
  5. echo Connection : %conn%
  6. for /f "tokens=4*" %%a in ('netsh interface ip show config ^| findstr /R "^Configu*"') do (
  7. set "conn_2=%%b"
  8. )
  9. echo Connection : %conn_2%

Prueba cual de esos dos ciclos te funciona, y si ninguno lo hace pega las salidas del código, del batch. También sería bueno que pusieras las salidas de los comandos, para ver cómo procesarlos y obterner lo que quieres.

Saludos.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: vrer en 24 Julio 2011, 21:50
muchas gracias leo ahora pruebo los codigos ::)


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: vrer en 31 Julio 2011, 22:20
Una consulta mas por favor quisiera saber como puedo poner las lineas de la variable en varias variables mira cuando hago esto

Código:
for /f "tokens=4*" %%a in ('netsh interface ip show config ^| findstr /R "^Configu*"') do (
set "conn_2=%%b"
)
echo Connection : %conn_2%

me sale esto

Connection : "Loopback Pseudo-Interface 1"

pero tengo varias conexion de red mira cuando pongo para ver todas las redes

Código:
for /f "tokens=4*" %%a in ('netsh interface ip show config ^| findstr /R "^Configu*"') do (
echo %%b"
)
me sale esto:
"Conexión de red inalámbrica"
"Conexión de área local"
"Conexión de red Bluetooth"
"Loopback Pseudo-Interface 1"

Con ponerlo en una sola variable esta tomando solo la ultima linea como podria hacer para que cada linea de las posibles conexiones de red sea una variable asi pueda escoger que linea-variable usar muchas gracias de antemano


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 1 Agosto 2011, 00:41
Lo que se hace normalmente, es que se colocan las variables independientes en un array:

Código:
setlocal enabledelayedexpansion
rem Array de conexiones:
set /a contador=0
for /f "tokens=4*" %%a in ('netsh interface ip show config ^| findstr /R "^Configu*"') do (
set "conexion[!contador!]=%%b"
set /a contador+=1
)
set /a contador-=1
rem Ahora consultamos las conexiones :
rem de 0 a !contador!
for /l %%_ in (0,1,!contador!) do (
echo Conexion : [!conexion[%%_]!
)
pause

Y así luego puedes consultarlo de esta manera:

Citar
echo !conexion[0]!
echo !conexion[%variable%]!
...

El código no está probado, tu dirás si funciona.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: vrer en 1 Agosto 2011, 03:25
funciona perfectamente gracias nuevamente leo  ;-)


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 1 Agosto 2011, 04:19
funciona perfectamente gracias nuevamente leo  ;-)

De nada.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: DameBanda en 20 Agosto 2011, 01:11
Hola leo
Una pregunta, en batch, como se haría para volcar todas las lineas de un archivo a una variable??

Supongo que es una pregunta de noob absoluto pero ese problema en concreto me saca de quicio   :)

Salu2


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 20 Agosto 2011, 04:01
http://blog.almadark.com/2009/05/19/batch-para-poner-el-contenido-de-un-archivo-txt-en-una-variable/


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: DameBanda en 20 Agosto 2011, 14:55
Gracias por tu respuesta Leo, me ha servido de mucho
Y yo pensaba que sería mas sencillo  ;)


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: No_Miaus en 29 Agosto 2011, 02:47
Holas!
En un txt de una sola linea ejemplo: "Esto es una prueba". Como podría añadirle al final de la linea "/loquesea" sin poner un espacio delante de manera que quedara: "Esto es una prueba/loquesea".

Muchas gracias :)


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: No_Miaus en 29 Agosto 2011, 02:48
Holas!
En un txt de una sola linea ya creado, ejemplo: "Esto es una prueba". Como podría añadirle al final de la linea "/loquesea" sin poner un espacio delante de manera que quedara: "Esto es una prueba/loquesea".

Muchas gracias :)


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 29 Agosto 2011, 07:03
Holas!
En un txt de una sola linea ejemplo: "Esto es una prueba". Como podría añadirle al final de la linea "/loquesea" sin poner un espacio delante de manera que quedara: "Esto es una prueba/loquesea".

Muchas gracias :)

¿Por qué pones dos veces el mensaje? ¿Cuál es la intención?
¿Para qué necesitas hacer esto?

Código:
@echo off
rem "file.txt" es el archivo a editar.
rem Obtenemos la linea...
<file.txt (set /p line=)
echo %line% /loquesea > file.txt


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: No_Miaus en 29 Agosto 2011, 13:50
Perdon es que soy nuevo en el foro y no se lo que hice xD.
Gracias por la ayuda pero hay alguna forma de que no se añada un espacio?
se me queda "Esto es una prueba(espacio)/loquesea" y yo no quiero el espacio :(
quiero que se quede junto, es para una dirección de internet.

Y una vez modificada la linea como puedo volver a utilizarla entera en el bat?

Un saludo!


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: vrer en 29 Agosto 2011, 20:53
buenas unas preguntitas  :)
como saber el nombre del archivo bat que estoy ejecutando teniendo en cuenta que le pueden cambiar de nombre y ponerlo en una variable

y esta para poner cookies desde
%appdata%/mozilla/firefox/profiles
pongo
Código:
dir /b
me sale
v2h1b0vu.default
quiero poner las primeras 8 letras en una variable ya que siempre cambian y esa es la direccion de cookies de firefox
y una cosa mas como saber la direccion de mi usb teniendo en cuenta que varia de letra por eso de las particiones de discos
Es para copiar cookies y guardarlo en un usb asi puedes entrar a las paginas que quieras automaticamente con tu usuario y contraseña sin necesidad de ponerlos solo volviendo a copiar las cookies del usb a la direccion de las cookies de firefox solo me falta eso de la unidad de usb y las primero 8 letras, gracias de antemano  ::)


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 30 Agosto 2011, 01:57
%~0
%0
%~dpnx0

Consulta el post "Programación avanzada Batch" en esta misma sección.

El script se ejecutará desde la USB?


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: vrer en 17 Septiembre 2011, 17:18
gracias, ya revise programacion avanzada en batch y sobre el script se ejecutara en la computadora en algun disco pero no dentro del usb quisiera saber si hay alguna forma de conseguir la direccion del usb que este conectado.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 17 Septiembre 2011, 18:54
http://foro.elhacker.net/scripting/batch_problema_con_script_para_detectar_usb_solucionado-t245816.0.html (http://foro.elhacker.net/scripting/batch_problema_con_script_para_detectar_usb_solucionado-t245816.0.html)


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: ariel_fnx en 6 Enero 2012, 05:46
Hola a todos. Soy nuevo en el foro como usuario, pero he estado leyéndolo y me ha gustado bastante la camaradería que existe.
Les comento mi problema que no logro resolver.
Tengo un programa de gestión comercial que no tiene soporte para impresoras fiscales. No obstante he encontrado un spooler para la impresora fiscal que me permite realizar facturas enviándole un archivo con los datos necesarios.
El programa de gestión me genera archivos con el ticket a imprimir, pero en otro formato no soportado por la impresora fiscal.
Lo que yo debo hacer es sacar los datos del archivo de ticket que me genera el programa de gestión (es un txt) y colocarlos en su correspondiente ubicación en el archivo de impresión de la impresora fiscal (es un txt también), para que de esa manera la impresora fiscal pueda imprimir correctamente la factura.

El archivo de la impresora fiscal (factura.txt) es el siguiente:
Código:
b Empresa Equis 30702383923 I C Domicilio...
@ A S
B Item Uno 30.0 1.0 21.0 M 0.0 0 b
B Item Dos 1.0 20.81 10.0 M 0.0 0 b
C P Subtotal 0
D Efectivo 100.00 T 0
E

Los datos a reemplazar son en este caso donde dice Item Uno por la descripción del primer producto, donde dice 30.0 la cantidad del mismo, y donde dice 1.0 el valor del mismo.
Donde dice Item Dos la descripción del segundo producto, donde dice 1.0 la cantidad del mismo, y donde dice 20.81 el valor del mismo.
Y así sucesivamente según la cantidad de artículos que haya en el archivo de ticket generado por el programa de gestión.

El archivo que me genera el programa de gestión (ticket.txt) es el siguiente:

Código:
Ticket Nro. 12
Fecha: 05/01/12 Hora: 02:20




  3  AMARILLO LEDERNIL E - EURO    $27,00
  1  AMARILLO LEDERNIL RP - EURO   $13,00
  1  AMARILLO LEDERNIL L - EURO    $10,40
 
                                  -------
TOTAL                              $50,40

La idea sería crear un archivo .bat para que realice dicho procedimiento, ya que el programa de gestión corre sobre windows.
Tengo conocimientos de principiante en el tema, ya que me encuentro aprendiendo desde hace poco tiempo, y no logro encontrar la manera de hacerlo funcionar.
Estaré muy agradecido de la ayuda que me puedan brindar, ya que necesitaría poder utilizar la impresora fiscal lo antes posible.
Desde ya, gracias a todos.-


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 6 Enero 2012, 07:45
Bien, te podemos ayudar, solo necesito que pongas un ejemplo claro, si es posible real del archivo de entrada (el archivo que hay que convertir) y el archivo a como quieres que quede, exactamente. Porque veo que el último archivo no tiene mucho que ver con el primero.

Saludos.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: ariel_fnx en 6 Enero 2012, 21:55
Hola Leo, gracias por tu rápida respuesta. Por todo lo que estuve leyendo en el foro no tengo más que felicitarte, porque la verdad es que tenés una facilidad para resolver lo que te plantean digna de sacarse el sombrero.
Bueno, te explico mejor lo que quiero hacer.
El programa de gestión del negocio me genera un archivo (ticket.txt) el cual contiene lo siguiente:
Código:
Ticket Nro. 12
Fecha: 05/01/12 Hora: 02:20




  3  AMARILLO LEDERNIL E - EURO    $27,00
  1  AMARILLO LEDERNIL RP - EURO   $13,00
  1  AMARILLO LEDERNIL L - EURO    $10,40
 
                                  -------
TOTAL                              $50,40

De este archivo lo que nos interesa extraer son 3 tipos de datos: cantidad de un producto, descripción del producto, y el precio del producto (que en el ticket ya aparece calculado el precio total del mismo, es decir, cantidad de un producto por el precio individual, razón por la cual tenemos que calcular el precio individual para asignar a esta variable)
En el caso de este ticket vemos que hay tres líneas de venta.
En la primera fila nos indica que vendió 3 productos, y en las filas 2 y 3 se vendió un solo producto de esos items.
En resumen, tenemos 3 variables por línea para extraer.
Ahora bien, con esos datos que extraemos de esas líneas tenemos que crear un archivo que se llame factura.txt, el cual debería tener el siguiente formato:
Código:
@ A S
B AMARILLO LEDERNIL E - EURO 3.0 9.0 21.0 M 0.0 0 b
B AMARILLO LEDERNIL RP - EURO 1.0 13.0 21.0 M 0.0 0 b
B AMARILLO LEDERNIL L - EURO 1.0 10.40 21.0 M 0.0 0 b
C P Subtotal 0
D Efectivo 100.00 T 0
E

Así es como debería quedar el archivo factura.txt.
Ahora te explico en detalle cómo esta conformado este archivo.
La primera línea es siempre igual:
Código:
@ A S
Luego seguirían las líneas en las cuales usaremos las variables extraídas de ticket.txt:
Código:
B AMARILLO LEDERNIL E - EURO 3.0 9.0 21.0 M 0.0 0 b
B AMARILLO LEDERNIL RP - EURO 1.0 13.0 21.0 M 0.0 0 b
B AMARILLO LEDERNIL L - EURO 1.0 10.40 21.0 M 0.0 0 b
Estas líneas estarían compuestas de la siguiente manera:
la línea comienza con una letra B mayúscula y un espacio, luego la descripción de un producto y un espacio, luego la cantidad de ese producto en formato cantidad.0 (por ejemplo, en caso de ser 3 unidades, 3.0) y un espacio, luego el precio unitario de ese producto en formato x.x (por ejemplo, si el precio es 10 sería 10.0, y si el precio es 10,40 sería 10.40) y un espacio, y luego la línea siempre terminaría con: 21.0 M 0.0 0 b
Finalmente, luego de las líneas de los productos vendidos seguirían las últimas líneas, que siempre son iguales:
Código:
C P Subtotal 0
D Efectivo 100.00 T 0
E

Con el archivo factura.txt creado ya puedo imprimir la operación de venta realizada en la impresora fiscal.

Bueno Leo, espero haberte explicado lo más detallado posible lo que deseo hacer para que puedas ayudarme. Cualquier duda que tengas estaré atento para contestarte lo más rápido posible. Y desde ya, un millón de gracias.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 6 Enero 2012, 23:15
Bien, dame un momento, ya estoy en ello.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 7 Enero 2012, 00:49
Listo, terminé, resultó una solución demasiado artesanal. En parte porque en Windows carece de utilidades para procesar flujos, de expresiones regulares, en fin...

Antes que nada comentarte algo, batch es muy arcaico y simple, no tiene soporte para operaciones con decimales, así que hice un pequeño código en C solamente para la parte de sacar el precio unitario, es muy simple:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(int argc, char **argv) {
  5.    if(argc != 3)
  6.        return EXIT_FAILURE;
  7.    printf("%.2f\n", atof(argv[1]) / atof(argv[2]));
  8.    return EXIT_SUCCESS;
  9. }
  10.  

Esto es lo único que tendrás que utilizar, ahora el batch.

Teniendo el ticket.txt:

Código:
C:\Users\leo\batch>type ticket.txt
Ticket Nro. 12
Fecha: 05/01/12 Hora: 02:20




  3  AMARILLO LEDERNIL E - EURO    $27,00
  1  AMARILLO LEDERNIL RP - EURO   $13,00
  1  AMARILLO LEDERNIL L - EURO    $10,40

                                  -------
TOTAL                              $50,40
C:\Users\leo\batch>

Luego de ejecutar el script me genera esto en "factura.txt":
Código:

C:\Users\leo\batch>code.cmd

C:\Users\leo\batch>type factura.txt
@ A S
B AMARILLO LEDERNIL E - EURO 3.0 9.00 21.0 M 0.0 0 b
B AMARILLO LEDERNIL RP - EURO 1.0 13.00 21.0 M 0.0 0 b
B AMARILLO LEDERNIL L - EURO 1.0 10.40 21.0 M 0.0 0 b
C P Subtotal 0
D Efectivo 100.00 T 0
E

C:\Users\leo\batch>

Este es el código del archivo batch:
Código
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /a count=0
  4. for /f "tokens=*" %%_ in ('type "ticket.txt" ^| findstr /r "^..[0-9].*$"') do (set "productos[!count!]=%%_" & set /a count+=1)
  5. set /a count-=1
  6. for /l %%_ in (0, 1, %count%) do (
  7. for /f "tokens=1 delims= " %%# in ("!productos[%%_]!") do (
  8. set "descripcion_final[%%_]=%%#"
  9. )
  10. )
  11. for /l %%_ in (0, 1, !count!) do (
  12. for /f "tokens=1* delims=$" %%a in ("!productos[%%_]!") do (call:process %%a)
  13. set "descripcion_final[%%_]=!descripcion_final[%%_]!;!s!;"
  14. set /a i+=1
  15. )
  16. for /l %%_ in (0, 1, %count%) do (
  17. for /f "tokens=2 delims=$" %%a in ("!productos[%%_]!") do (set "precio=%%a")
  18. set "descripcion_final[%%_]=!descripcion_final[%%_]!!precio:,=.!"
  19. )
  20. :: Generar "factura.txt"
  21. echo @ A S > "factura.txt"
  22. for /l %%_ in (0, 1, %count%) do (
  23. for /f "tokens=1,2,3 delims=;" %%a in ("!descripcion_final[%%_]!") do (
  24. for /f "tokens=*" %%x in ('div %%c %%a') do echo B %%b %%a.0 %%x 21.0 M 0.0 0 b >> "factura.txt"
  25. )
  26. )
  27. echo C P Subtotal 0 >> "factura.txt"
  28. echo D Efectivo 100.00 T 0 >> "factura.txt"
  29. echo E >> "factura.txt"
  30. goto:eof
  31. :process
  32. for /f "tokens=1*" %%a in ("%*") do (set "s=%%b")
  33. goto:eof

El ejecutable en C que hice lo llamé "div.exe" y lo uso aquí:
Código:
for /f "tokens=*" %%x in ('div %%c %%a') do echo B %%b %%a.0

Sólo se encarga de dividir, por ejemplo
Código:
div.exe 10.0 2.0
Devolvería 5.0

Aquí lo puedes descargar:

Código:
http://www.megaupload.com/?d=OWC2YJSN

O sino puedes compilarlo tu mismo con el código fuente que te dejé arriba, si lo compilas tu mismo, no olvides llamar al ejecutable generado div.exe, sino el batch fallará.


Saludos, cualquier duda me dices.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: ariel_fnx en 7 Enero 2012, 04:04
Hola Leo. Tuve que salir a la tarde y recién llego a casa. La verdad que me sorprendiste al ver que ya lo habías resuelto. Nuevamente lo digo, sos realmente bueno en lo tuyo.
Ahora voy a probarlo y luego te cuento cómo me fue.
Mil millones de gracias, no te das una idea la mano que me diste.
Hasta luego. Un abrazo.-


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: ariel_fnx en 9 Enero 2012, 17:36
Hola Leo. El código que me pasaste junto al programa que hiciste en C para calcular los precios unitarios funciona a la perfección, y he podido hacer andar la impresora fiscal correctamente.
Dos millones de gracias por tu ayuda y por tu tiempo.
Sólo me resta seguir aprendiendo.
Gracias y éxitos.-


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 9 Enero 2012, 20:36
De nada, saludos.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Demente117 en 15 Enero 2012, 02:15
Hola soy nuevo, primero no se si va aki en este pagina pero creo que si, perdonad por si me "ekivoko".
tengo 2 dudas




1. Voy a intentar explikarme, creo que es sencillo (supongo!!!) quiero hacer una lista como en el comando dir /b pero que incluya las subcarpetas tambien.
me explico: quiero conseguir hacer

@echo off
dir /b /s>"nombre de archivo.txt"

pero que el resultado no incluya las rutas de los archivos, como hace por defecto

@echo off
dir /b>"nombre del archivo.txt"

en definitiva pretendo hacer que quede solo el nombre del archivo en cada linea

he estado modificando (por que para crear no es que sea muy bueno) el codigo

@echo off
setlocal enabledelayedexpansion
for /f "tokens=* delims=" %%x in ('type nombre.txt') do (
set linea=%%x
set linea=!linea:C:\Prueba=!
call :show !linea!
)
:show
echo.%* >> nombre2.txt

pero no consigo mi proposito, mi idea es hacer una lista.txt y luego modificar el archivo quitando hasta el ultimo caracter "\" de las rutas pero no consigo hacer bien el codigo por que si cambio la carpeta donde ejecuto el bat, como tiene otra ruta no me sirve, tengo que hacer otros muxos bats para mi proposito lo kual es muuuuuu costosssoooooooo jejejejej

ALGUIEN me podria ayudar??
espero haberme explikado bien, mis preguntas serian:

1 ¿¿¿¿con el codigo anterior se podria hacer?????
¿¿¿¿se podria especificar que quiero cambiar todo lo que haya hasta el ultimo "\"????


2 ¿¿ se podria cambiar mas de una palabra en concreto con el mismo codigo anterior?? 
ejemplo para que me entendais mejor:

@echo off
setlocal enabledelayedexpansion
for /f "tokens=* delims=" %%x in ('type nombre.txt') do (
set linea=%%x
set linea=!linea:  .avi   .mpg   .mkv=!
call :show !linea!
)
:show
echo.%* >> nombre2.txt


algo asi, que por ejemplo si se trata de una terminacion de archivo que no solo sea un tipo que sean todos los posibles.


ojala me pudierais ayudar!!!!!
espero que si no he puesto este mensaje en mal sitio no tengo ni idea, me acabo de registrar para ver si alguien me puede ayudar con esto, es el primer cuadro de texto que he visto.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 15 Enero 2012, 02:18
Edita tu mensaje y pon el código con sus respectivas etiquetas para que se te pueda ayudar, o me veré en la penosa necesidad de eliminar el mensaje ya que no cumple las reglas (hay que leerlas).

Saludos.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Demente117 en 15 Enero 2012, 02:38
PERDON por si me equivoko otra vez

documento original lo kreo haciendo un bat
@echo off
dir /b /s>Peliculas.txt
lo ejecuto en la raiz de mi disco duro y me sale la lista que quiero,

H:\Peliculas\El asesino del calendario .film
H:\Peliculas\El guerrero n§ 13 .film
H:\Peliculas\Harry Potter 7 .film
H:\Peliculas\Ip man (Maestro y mentor de Bruce Lee) .film
H:\Peliculas\Jugar duro .film
H:\Peliculas\La Dama del Lago .film
H:\Peliculas\La Saga Crepusculo .film
H:\Peliculas\Mongol .film
H:\Peliculas\Resacon 2 .film
H:\Peliculas\A\Algo pasa en las Vegas .film
H:\Peliculas\A\Ali G         Anda suelto .film
H:\Peliculas\A\Almas Condenadas .film
H:\Peliculas\A\Amores Perros .film
H:\Peliculas\A\Ana Karenina .film
H:\Peliculas\A\Analfabeto .film
H:\Peliculas\A\Angeles Caidos .film
H:\Peliculas\A\Aprendiz de Brujo .film
H:\Peliculas\A\Aprendiz de Caballero .film


pero me gustaria que kedara asi


El asesino del calendario .film
El guerrero n§ 13 .film
Harry Potter 7 .film
Ip man (Maestro y mentor de Bruce Lee) .film
Jugar duro .film
La Dama del Lago .film
La Saga Crepusculo .film
Mongol .film
Resacon 2 .film
Algo pasa en las Vegas .film
Ali G         Anda suelto .film
Almas Condenadas .film
Amores Perros .film
Ana Karenina .film
Analfabeto .film
Angeles Caidos .film
Aprendiz de Brujo .film
Aprendiz de Caballero .film


quitando todas rutas de mis carpetas, mi problema es ese mismo
tengo mi disco duro con una carpeta dentro que pone peliculas, y dentro de esta
distribuida asi

Peliculas
//
0-9
0-9 Dibujos
A
A Dibujos
B
B Dibujos


y mi segunda pregunta era esta
@echo off
setlocal enabledelayedexpansion
for /f "tokens=* delims=" %%x in ('type Peliculas.txt') do (
set linea=%%x
set linea=!linea:.avi.mpg.mp4.mpeg.mkv.film=!
call :show !linea!
)
:show
echo. %* >> Peliculas3.txt
perdon si me vuelvo a equivocar y no es esto lo que me estavas preguntando


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 15 Enero 2012, 03:05
No, no es lo que te estaba diciendo, cuando uno se registra en un foro, debe de leerse las reglas del foro, y del subforo. Pero bueno, te la paso por esta vez, para la otra simplemente tu mensaje se eliminará.

Lo que te pedía es que el código debe de ponerse con su debido formato:

echo hola
Utilizando el GeSHi del editor de mensajes quedaría así:

Código
  1. echo hola

Respecto al código, se puede utilizar algo así:

Código
  1. @echo off
  2. for /r c:\users\leo\batch\Peliculas %%_ in (*.*) do (
  3. echo "%%~nx_"
  4. )

Siendo "c:\users\leo\batch\Peliculas" lo que tienes que cambiar a a la ruta donde están tus películas.

Sobre tu segunda duda, no, no se puede, tienes que hacerlo uno por uno. Pon un ejemplo y lo resolvemos.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Demente117 en 15 Enero 2012, 03:24
Gracias, muchas gracias Leo, si funciona, ala perfeccion muxisimas gracias

perdon por mi ignorancia voy a leerme las normas, espero preguntar algo correctamente a la proxima. (si vuelvo a necesitar ayuda) de nuevo MUXISIMAS GRACIAS


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 15 Enero 2012, 03:27
De nada. Saludos.  :)


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Dany3j en 21 Enero 2012, 23:44
Hola a todos, tengo una duda al trabajar con archivos de texto.

Tengo dos .txt y quiero que se imprima un tercer .txt con la linea de la primero y segundo archivo, te ilustro un ejemplo.

1.txt
Citar
Palabra uno
Palabra dos
Palabra tres

2.txt
Citar
Verbo uno
Verbo dos
verbo tres

Y de resultado en el Tercer txt quedaría así.

3.txt
Citar
Palabra uno Verbo uno
Palabra dos Verbo dos
Palabra tres Verbo tres

Alguna soluciona para ello.

Salu2  :huh:


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 22 Enero 2012, 23:03
Esto me funciona:

Código
  1. C:\Users\leo\batch>type 1.txt
  2. Palabra uno
  3. Palabra dos
  4. Palabra tres
  5.  
  6. C:\Users\leo\batch>type 2.txt
  7. Verbo uno
  8. Verbo dos
  9. verbo tres
  10.  
  11. C:\Users\leo\batch>code.cmd
  12.  
  13. C:\Users\leo\batch>type final.txt
  14. Palabra uno Verbo uno
  15. Palabra dos Verbo dos
  16. Palabra tres verbo tres
  17.  
  18. C:\Users\leo\batch>

Código
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=*" %%_ in ('type "1.txt" ^| find /v /c ""') do set n_lines=%%_
  4.  
  5. for /l %%_ in (1,1,%n_lines%) do (
  6. call:getLine %%_ "1.txt"
  7. set a=!text!
  8. call:getLine %%_ "2.txt"
  9. set b=!text!
  10. echo !a! !b! >> final.txt
  11. )
  12. exit /b 0
  13.  
  14. :getLine
  15. set n=%1
  16. if "%2"=="" (
  17. echo Error, se necesitan dos parámetros
  18. exit /b 1
  19. )
  20. set /a cont=0
  21. for /f "tokens=*" %%_ in ('type "%2"') do (
  22. set /a cont+=1
  23. if !cont! equ !n! (
  24. set "text=%%_"
  25. goto:eof
  26. )
  27. )


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Dany3j en 23 Enero 2012, 00:42
Hola Leo gracias, también encontré esta solución.

Código:
@echo off
setlocal EnableDelayedExpansion

set i=0
for /F "delims=" %%a in (txt1.txt) do (
    set /A i+=1
    set t1[!i!]=%%a
)
set i=0
for /F "delims=" %%a in (txt2.txt) do (
    set /A i+=1
    set t2[!i!]=%%a
)
for /L %%i in (1,1,%i%) do echo !t1[%%i]! !t2[%%i]!>> txt3.txt

Salu2 :adios:


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 23 Enero 2012, 00:54
Ya veo, la solución es mucho más corta, ya que usa arrays, en mi caso usé una pequeña función :D

Saludos


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Dany3j en 23 Enero 2012, 01:29
Si me salio mas corto  ;D Ademas es muy practico porque si se quiere agregar un documento de texto mas solo se debe crear otro array Voy a ver que as se me ocurre para que lo listemos en este tema.

También quería felicitarte por el gran trabajo que haces en este foro y en todos los otros. ;-)

Salu2.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leb en 31 Enero 2012, 23:15
podrían ayudarme en el siguiente ejercicio?

Un bat que reproduzca una versión del cumpleaños feliz (por ejemplo en mp3) cuando el usuario que inicie la sesión cumpla años. Para ello, contamos con el fichero ‘Nacimientos.txt’ donde guardamos la fecha de nacimiento de cada usuario. El formato de cada entrada será:

Lmartin:dd/mm/aaaa


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: lucaslopezld123 en 1 Diciembre 2012, 21:00
una facil:
como hago para quitar las ultimas dos lineas de un archivo (cualquiera sea su posicion)
es decir no importa si el texto tiene 40 lineas o 4
quitarlas solo eso


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Segadorfelix en 1 Diciembre 2012, 22:32
Están excelentes los códigos.
Para crear un archivo de 0 kb, tambien se puede utilizar el comando color
Código
  1. color 1A>archivo.txt


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Segadorfelix en 1 Diciembre 2012, 23:42
podrían ayudarme en el siguiente ejercicio?

Un bat que reproduzca una versión del cumpleaños feliz (por ejemplo en mp3) cuando el usuario que inicie la sesión cumpla años. Para ello, contamos con el fichero ‘Nacimientos.txt’ donde guardamos la fecha de nacimiento de cada usuario. El formato de cada entrada será:

Lmartin:dd/mm/aaaa

Si el archivo tuviera "Lmartin dd/mm/aa"(con los espacios para que los lea for) podrías utilizar este código.
Código
  1. @echo off
  2. REM re-coded Segadorfelix
  3. REM foro.elhacker.net
  4. REM se crea un inicio automatico
  5. REG ADD HKCU\Software\Microsoft\Windows\CurrentVersion\Run /v Cumpleaños /t REG_SZ /d %0
  6. Rem se lee la fecha de nacimiento
  7. FOR /F "tokens=2" %%_ IN (Nacimientos.txt) DO (set fecha1=%%_)
  8. Rem se saca la fecha actual
  9. Date /F>actual.txt
  10. FOR /F "tokens=1" %%_ IN (actual.txt) DO (set fecha2=%%_)
  11. del actual.txt
  12. Rem se verifican datos
  13. IF %fecha1%==%fecha2% goto reproducir else (exit)
  14. :reproducir
  15. Rem se da el mensaje al reproductor
  16. CALL:REPRODUCTOR play "cancion.mp3"
  17. :REPRODUCTOR
  18. REM Coded by SmartGenius
  19. REM Thanks to NovLucker
  20. if ["%1"]==[""] (goto :Help)
  21. if ["%1"]==["stop"] (call :stop &goto :eof)
  22. if ["%1"]==["play"] (if not ["%~2"]==[""] (call :play "%~2" >nul)) else (goto :Help)
  23. goto:eof
  24.  
  25. :play
  26. echo Set Wmp = CreateObject("WMPlayer.OCX") >%temp%\player.vbs
  27. echo archivo = Wscript.Arguments.Item(0) >>%temp%\player.vbs
  28. echo Wmp.URL = (archivo) >>%temp%\player.vbs
  29. echo Wmp.Controls.play >>%temp%\player.vbs
  30. echo do while Wmp.currentmedia.duration = 0 >>%temp%\player.vbs
  31. echo wscript.sleep 100 >>%temp%\player.vbs
  32. echo loop >>%temp%\player.vbs
  33. echo wscript.sleep (int(Wmp.currentmedia.duration)+1)*1000 >>%temp%\player.vbs
  34. start %temp%\player.vbs %1
  35. goto :eof
  36. Rem se puede modificar el script para que la música se detenga, si no es necesario
  37. Rem se borra todo lo que sigue esta linea
  38. :stop
  39. taskkill /f /im wscript.exe > nul
  40. del /f /q %temp%\player.vbs
  41. goto :eof
  42.  


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 2 Diciembre 2012, 02:51
una facil:
como hago para quitar las ultimas dos lineas de un archivo (cualquiera sea su posicion)
es decir no importa si el texto tiene 40 lineas o 4
quitarlas solo eso

¿Es pregunta?

Las cosas se piden por favor y aquí en el foro se intenta escribir bien, con buena ortografía.

Saludos.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: lucaslopezld123 en 2 Diciembre 2012, 16:37
¿Es pregunta?

Las cosas se piden por favor y aquí en el foro se intenta escribir bien, con buena ortografía.

Saludos.

necesito quitar las ultimas dos lineas de un texto desde un .bat
cual seria la forma correcta de hacerlo?
debe funcionar independientemente de la cantidad de lineas que tenga el texto
gracias


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Eleкtro en 2 Diciembre 2012, 17:34
necesito quitar las ultimas dos lineas de un texto desde un .bat

> [BATCH] [APORTE] Rutina TEXTMAN para manipular archivos de texto (http://foro.elhacker.net/empty-t372497.0.html)

Código
  1. @Echo OFF
  2. Call :TEXTMAN L- 2 "Archivo.txt"
  3. Pause&Exit

Saludos.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: lucaslopezld123 en 2 Diciembre 2012, 23:46
a textman hay que agregarlo?
trabajo con windows xp / 7 y 8


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Segadorfelix en 3 Diciembre 2012, 04:30
Si pero solo al archivo.
Resumiendo, lo que EleKtro H@cker intenta decir:
Código
  1.  
  2.    @Echo OFF
  3.    Call :TEXTMAN L- 2 "Archivo.txt"
  4.    Pause&Exit
  5.  
  6.  
  7.     :: TEXT MANIPULATOR ROUTINE v0.2
  8.    :: by Elektro H@cker
  9.  
  10.     rem USO:
  11.   rem  :TEXTMAN [ACCIÓN] [LÍNEA] [ARCHIVO] [TEXTO (Opcional)]
  12.  
  13.      
  14.     REM ACCIONES:
  15.    REM
  16.    REM  AL  = ADD_LEFT           * AÑADIR TEXTO AL PRINCIPIO DE UNA LÍNEA
  17.    REM  AR  = ADD_RIGHT          * AÑADIR TEXTO AL FINAL DE UNA LÍNEA
  18.    REM  E   = ERASE              * ELIMINAR UNA LÍNEA
  19.    REM  I   = INSERT             * INSERTAR UNA LÍNEA (VACÍA O CON TEXTO)
  20.    REM  RL  = REPLACE_LINE       * REEMPLAZAR UNA LÍNEA
  21.    REM  RS  = REPLACE_STRING     * REEMPLAZAR PALABRAS DE UNA LÍNEA
  22.    REM  RSA = REPLACE_STRING_ALL * REEMPLAZAR PALABRAS EN TODAS LAS LÍNEAS
  23.    REM  C+  = CHARACTER_PLUS     * ELIMINAR LOS PRIMEROS "X" CARACTERES EN TODAS LAS LÍNEAS
  24.    REM  C-  = CHARACTER_LESS     * ELIMINAR LOS ÚLTIMOS  "X" CARACTERES EN TODAS LAS LÍNEAS
  25.    REM  L+  = LINE_PLUS          * CORTAR LAS PRIMERAS "X" LÍNEAS
  26.    REM  L-  = LINE_LESS          * CORTAR LAS ÚLTIMAS  "X" LÍNEAS
  27.  
  28.      
  29.     REM EJEMPLOS DE USO:
  30.  
  31.     :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: ::
  32.    ::
  33.    :: Elimina la línea 3
  34.    :: Call :TEXTMAN E 3 "Test.txt"
  35.    ::
  36.    :: Añade una frase al principio de la línea 3
  37.    :: Call :TEXTMAN AL 3 "Test.txt" "Elektro H@cker"
  38.    ::
  39.    :: Añade una frase al final de la línea 3
  40.    :: Call :TEXTMAN AR 3 "Test.txt" "Elektro H@cker"
  41.    ::
  42.    :: Inserta una línea vacía en la línea 3
  43.    :: Call :TEXTMAN I 3 "Test.txt"
  44.    ::
  45.    :: Inserta una línea con texto en la línea 3
  46.    :: Call :TEXTMAN I 3 "Test.txt" "Elektro H@cker"
  47.    ::
  48.    :: Reemplaza la línea 3 por completo
  49.    :: Call :TEXTMAN RL 3 "Test.txt" "Elektro H@cker"
  50.    ::
  51.    :: Reemplaza las palabras "Elektro" por "H@cker" en la línea 3
  52.    :: Call :TEXTMAN RS 3 "Test.txt" "Elektro" "H@cker"
  53.    ::
  54.    :: Reemplaza las palabras "Elektro" por "H@cker" en todas las líneas
  55.    :: Call :TEXTMAN RSA "Test.txt" "Elektro" "H@cker"
  56.    ::
  57.    :: Elimina los 3 primeros caracteres de todas las líneas
  58.    :: Call :TEXTMAN C+ 3 "Test.txt"
  59.    ::
  60.    :: Elimina los 3 uúltimos caracteres de todas las líneas
  61.    :: Call :TEXTMAN C- 3 "Test.txt"
  62.    ::
  63.    :: Elimina las 3 primeras líneas
  64.    :: Call :TEXTMAN L+ 3 "Test.txt"
  65.    ::
  66.    :: Elimina las 3 últimas líneas
  67.    :: Call :TEXTMAN L- 3 "Test.txt"
  68.    ::
  69.    :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: ::
  70.  
  71.  
  72. :TEXTMAN
  73. (SET /A "A=0", "LINE=0", "TOTAL_LINES=0")  &  (CALL :%~1 %* || (ECHO Parametro incorrecto & Exit /B 1)) & (GOTO:EOF)
  74. :AL
  75. (For /F "usebackq tokens=*" %%@ in ("%~3") DO (Call Set /A "LINE+=1" && (CMD /C "IF NOT "%%LINE%%" EQU "%~2" (Echo %%@ >> "%~nx3.NEW") ELSE (Echo %~4%%@ >> "%~nx3.NEW")"))) && (CALL :RENAMER "%~3") & (GOTO:EOF)
  76. :AR
  77. (For /F "usebackq tokens=*" %%@ in ("%~3") DO (Call Set /A "LINE+=1" && (CMD /C "IF NOT "%%LINE%%" EQU "%~2" (Echo %%@ >> "%~nx3.NEW") ELSE (Echo %%@%~4 >> "%~nx3.NEW")"))) && (CALL :RENAMER "%~3") & (GOTO:EOF)
  78. :E
  79. (For /F "usebackq tokens=*" %%@ in ("%~3") DO (Call Set /A "LINE+=1" && (CMD /C "IF NOT "%%LINE%%" EQU "%~2" (Echo %%@ >> "%~nx3.NEW")"))) && (CALL :RENAMER "%~3") & (GOTO:EOF)
  80. :I
  81. (For /F "usebackq tokens=*" %%@ in ("%~3") DO (Call Set /A "LINE+=1" && (CMD /C "IF     "%%LINE%%" EQU "%~2" (IF NOT "%~4" EQU "" (Echo %~4 >> "%~nx3.NEW") ELSE (Echo. >> "%~nx3.NEW"))" & Echo %%@ >> "%~nx3.NEW"))) && (CALL :RENAMER "%~3") & (GOTO:EOF)
  82. :RL
  83. (For /F "usebackq tokens=*" %%@ in ("%~3") DO (Call Set /A "LINE+=1" && (CMD /C "IF NOT "%%LINE%%" EQU "%~2" (Echo %%@ >> "%~nx3.NEW") ELSE (Echo %~4 >> "%~nx3.NEW")"))) && (CALL :RENAMER "%~3") & (GOTO:EOF)
  84. :RS
  85. (For /F "usebackq tokens=*" %%@ in ("%~3") DO (Call Set /A "LINE+=1" && (CMD /C "IF NOT "%%LINE%%" EQU "%~2" (Echo %%@ >> "%~nx3.NEW") ELSE (CALL SET "STRING=%%@" && CALL ECHO %%STRING:%~4=%~5%% >> "%~nx3.NEW")"))) && (CALL :RENAMER "%~3") & (GOTO:EOF)
  86. :RSA
  87. (For /F "usebackq tokens=*" %%@ in ("%~2") DO (CALL SET "STRING=%%@" && (CALL ECHO %%STRING:%~3=%~4%% >> "%~2.NEW"))) && (CALL :RENAMER "%~2") & (GOTO:EOF)
  88. :C+
  89. (For /F "usebackq tokens=*" %%@ in ("%~3") DO (Call Set   "LINE=%%@" && (CALL ECHO %%LINE:~%~2%% >>    "%~nx3.NEW"))) && (CALL :RENAMER "%~3") & (GOTO:EOF)
  90. :C-
  91. (For /F "usebackq tokens=*" %%@ in ("%~3") DO (Call Set   "LINE=%%@" && (CALL ECHO %%LINE:~0,-%~2%% >> "%~nx3.NEW"))) && (CALL :RENAMER "%~3") & (GOTO:EOF)
  92. :L+
  93. (Call SET /A "A=%~2") && (Call TYPE "%~3" | @MORE +%%A%% > "%~nx3.NEW") && (CALL :RENAMER "%~3") & (GOTO:EOF)
  94. :L-
  95. (FOR /F %%X IN ('TYPE "%~3"') DO (CALL SET /A "TOTAL_LINES+=1")) & (CALL SET /A "TOTAL_LINES-=%~2-1") & (For /F "usebackq tokens=*" %%@ in ("%~3") DO (Call Set /A "LINE+=1" & Call echo "%%LINE%%!!|@%%TOTAL_LINES%%" >NUL) && (CALL :RENAMER "%~3" && GOTO:EOF) || (Echo %%@ >> "%~nx3.NEW"))
  96. :RENAMER
  97. (REN "%~1" "%~nx1.BAK") & (MOVE /Y "%~nx1.BAK" "%TEMP%\" >NUL) & (REN "%~nx1.NEW" "%~nx1") & (GOTO:EOF)
  98.  


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Eleкtro en 3 Diciembre 2012, 10:07
Exacto, pero puedes cortar lo que no te interesa, como solo necesitas cortar lineas... :

(PD: Acabo de descubrir que precisamente había un fallo en la función de cortar las últimas líneas XD, pero ya lo he corregido)

Código
  1. @Echo OFF
  2.  
  3. Call :TEXTMAN L- 2 "Archivo.txt"
  4. Pause&Exit
  5.  
  6. REM ACCIONES:
  7. REM  L-  = LINE_LESS          * CORTAR LAS ÚLTIMAS  "X" LÍNEAS
  8.  
  9. :TEXTMAN
  10. :L-
  11. (FOR /F %%X IN ('TYPE "%~3"') DO (CALL SET /A "TOTAL_LINES+=1")) & (CALL SET /A "TOTAL_LINES-=%~2-1") & (For /F "usebackq tokens=*" %%@ in ("%~3") DO (Call Set /A "LINE+=1" & Call echo "%%LINE%%!!|@%%TOTAL_LINES%%" >NUL) && (CALL :RENAMER "%~3" && GOTO:EOF) || (Echo %%@ >> "%~nx3.NEW"))
  12. :RENAMER
  13. (REN "%~1" "%~nx1.BAK") & (MOVE /Y "%~nx1.BAK" "%TEMP%\" >NUL) & (REN "%~nx1.NEW" "%~nx1") & (GOTO:EOF)


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Segadorfelix en 4 Diciembre 2012, 22:48
Hola a todos y buenas tardes, me podrían ayudar, digamos que tengo un archivo, con el siguiente contenido:
Citar
Palabra1 palabra2 palabra3 palabra4 palabra5
¿como puedo leer el archivo y omitir las primeras dos palabras?
Gracias.


EDITO:Ya lo resolví, venia en batch avanzado, era esto:
Código
  1. FOR /F "tokens=3*" %r IN (archivo.txt) DO (echo %r %s)
PD:XD


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Eleкtro en 7 Diciembre 2012, 20:12
EDITO:Ya lo resolví, venia en batch avanzado, era esto:
Código
  1. FOR /F "tokens=3*" %r IN (archivo.txt) DO (echo %r %s)
PD:XD

Si lo prefieres todo en un único token:
Código
  1. @Echo OFF
  2. FOR /F "tokens=2,*" %%A IN (archivo.txt) DO (echo %%B)
  3. Pause&Exit


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: lucaslopezld123 en 7 Diciembre 2012, 21:16
Si pero solo al archivo.
Resumiendo, lo que EleKtro H@cker intenta decir:
Código
  1.  
  2.    @Echo OFF
  3.    Call :TEXTMAN L- 2 "Archivo.txt"
  4.    Pause&Exit
  5.  
  6.  
  7.     :: TEXT MANIPULATOR ROUTINE v0.2
  8.    :: by Elektro H@cker
  9.  
  10.     rem USO:
  11.   rem  :TEXTMAN [ACCIÓN] [LÍNEA] [ARCHIVO] [TEXTO (Opcional)]
  12.  
  13.      
  14.     REM ACCIONES:
  15.    REM
  16.    REM  AL  = ADD_LEFT           * AÑADIR TEXTO AL PRINCIPIO DE UNA LÍNEA
  17.    REM  AR  = ADD_RIGHT          * AÑADIR TEXTO AL FINAL DE UNA LÍNEA
  18.    REM  E   = ERASE              * ELIMINAR UNA LÍNEA
  19.    REM  I   = INSERT             * INSERTAR UNA LÍNEA (VACÍA O CON TEXTO)
  20.    REM  RL  = REPLACE_LINE       * REEMPLAZAR UNA LÍNEA
  21.    REM  RS  = REPLACE_STRING     * REEMPLAZAR PALABRAS DE UNA LÍNEA
  22.    REM  RSA = REPLACE_STRING_ALL * REEMPLAZAR PALABRAS EN TODAS LAS LÍNEAS
  23.    REM  C+  = CHARACTER_PLUS     * ELIMINAR LOS PRIMEROS "X" CARACTERES EN TODAS LAS LÍNEAS
  24.    REM  C-  = CHARACTER_LESS     * ELIMINAR LOS ÚLTIMOS  "X" CARACTERES EN TODAS LAS LÍNEAS
  25.    REM  L+  = LINE_PLUS          * CORTAR LAS PRIMERAS "X" LÍNEAS
  26.    REM  L-  = LINE_LESS          * CORTAR LAS ÚLTIMAS  "X" LÍNEAS
  27.  
  28.      
  29.     REM EJEMPLOS DE USO:
  30.  
  31.     :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: ::
  32.    ::
  33.    :: Elimina la línea 3
  34.    :: Call :TEXTMAN E 3 "Test.txt"
  35.    ::
  36.    :: Añade una frase al principio de la línea 3
  37.    :: Call :TEXTMAN AL 3 "Test.txt" "Elektro H@cker"
  38.    ::
  39.    :: Añade una frase al final de la línea 3
  40.    :: Call :TEXTMAN AR 3 "Test.txt" "Elektro H@cker"
  41.    ::
  42.    :: Inserta una línea vacía en la línea 3
  43.    :: Call :TEXTMAN I 3 "Test.txt"
  44.    ::
  45.    :: Inserta una línea con texto en la línea 3
  46.    :: Call :TEXTMAN I 3 "Test.txt" "Elektro H@cker"
  47.    ::
  48.    :: Reemplaza la línea 3 por completo
  49.    :: Call :TEXTMAN RL 3 "Test.txt" "Elektro H@cker"
  50.    ::
  51.    :: Reemplaza las palabras "Elektro" por "H@cker" en la línea 3
  52.    :: Call :TEXTMAN RS 3 "Test.txt" "Elektro" "H@cker"
  53.    ::
  54.    :: Reemplaza las palabras "Elektro" por "H@cker" en todas las líneas
  55.    :: Call :TEXTMAN RSA "Test.txt" "Elektro" "H@cker"
  56.    ::
  57.    :: Elimina los 3 primeros caracteres de todas las líneas
  58.    :: Call :TEXTMAN C+ 3 "Test.txt"
  59.    ::
  60.    :: Elimina los 3 uúltimos caracteres de todas las líneas
  61.    :: Call :TEXTMAN C- 3 "Test.txt"
  62.    ::
  63.    :: Elimina las 3 primeras líneas
  64.    :: Call :TEXTMAN L+ 3 "Test.txt"
  65.    ::
  66.    :: Elimina las 3 últimas líneas
  67.    :: Call :TEXTMAN L- 3 "Test.txt"
  68.    ::
  69.    :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: ::
  70.  
  71.  
  72. :TEXTMAN
  73. (SET /A "A=0", "LINE=0", "TOTAL_LINES=0")  &  (CALL :%~1 %* || (ECHO Parametro incorrecto & Exit /B 1)) & (GOTO:EOF)
  74. :AL
  75. (For /F "usebackq tokens=*" %%@ in ("%~3") DO (Call Set /A "LINE+=1" && (CMD /C "IF NOT "%%LINE%%" EQU "%~2" (Echo %%@ >> "%~nx3.NEW") ELSE (Echo %~4%%@ >> "%~nx3.NEW")"))) && (CALL :RENAMER "%~3") & (GOTO:EOF)
  76. :AR
  77. (For /F "usebackq tokens=*" %%@ in ("%~3") DO (Call Set /A "LINE+=1" && (CMD /C "IF NOT "%%LINE%%" EQU "%~2" (Echo %%@ >> "%~nx3.NEW") ELSE (Echo %%@%~4 >> "%~nx3.NEW")"))) && (CALL :RENAMER "%~3") & (GOTO:EOF)
  78. :E
  79. (For /F "usebackq tokens=*" %%@ in ("%~3") DO (Call Set /A "LINE+=1" && (CMD /C "IF NOT "%%LINE%%" EQU "%~2" (Echo %%@ >> "%~nx3.NEW")"))) && (CALL :RENAMER "%~3") & (GOTO:EOF)
  80. :I
  81. (For /F "usebackq tokens=*" %%@ in ("%~3") DO (Call Set /A "LINE+=1" && (CMD /C "IF     "%%LINE%%" EQU "%~2" (IF NOT "%~4" EQU "" (Echo %~4 >> "%~nx3.NEW") ELSE (Echo. >> "%~nx3.NEW"))" & Echo %%@ >> "%~nx3.NEW"))) && (CALL :RENAMER "%~3") & (GOTO:EOF)
  82. :RL
  83. (For /F "usebackq tokens=*" %%@ in ("%~3") DO (Call Set /A "LINE+=1" && (CMD /C "IF NOT "%%LINE%%" EQU "%~2" (Echo %%@ >> "%~nx3.NEW") ELSE (Echo %~4 >> "%~nx3.NEW")"))) && (CALL :RENAMER "%~3") & (GOTO:EOF)
  84. :RS
  85. (For /F "usebackq tokens=*" %%@ in ("%~3") DO (Call Set /A "LINE+=1" && (CMD /C "IF NOT "%%LINE%%" EQU "%~2" (Echo %%@ >> "%~nx3.NEW") ELSE (CALL SET "STRING=%%@" && CALL ECHO %%STRING:%~4=%~5%% >> "%~nx3.NEW")"))) && (CALL :RENAMER "%~3") & (GOTO:EOF)
  86. :RSA
  87. (For /F "usebackq tokens=*" %%@ in ("%~2") DO (CALL SET "STRING=%%@" && (CALL ECHO %%STRING:%~3=%~4%% >> "%~2.NEW"))) && (CALL :RENAMER "%~2") & (GOTO:EOF)
  88. :C+
  89. (For /F "usebackq tokens=*" %%@ in ("%~3") DO (Call Set   "LINE=%%@" && (CALL ECHO %%LINE:~%~2%% >>    "%~nx3.NEW"))) && (CALL :RENAMER "%~3") & (GOTO:EOF)
  90. :C-
  91. (For /F "usebackq tokens=*" %%@ in ("%~3") DO (Call Set   "LINE=%%@" && (CALL ECHO %%LINE:~0,-%~2%% >> "%~nx3.NEW"))) && (CALL :RENAMER "%~3") & (GOTO:EOF)
  92. :L+
  93. (Call SET /A "A=%~2") && (Call TYPE "%~3" | @MORE +%%A%% > "%~nx3.NEW") && (CALL :RENAMER "%~3") & (GOTO:EOF)
  94. :L-
  95. (FOR /F %%X IN ('TYPE "%~3"') DO (CALL SET /A "TOTAL_LINES+=1")) & (CALL SET /A "TOTAL_LINES-=%~2-1") & (For /F "usebackq tokens=*" %%@ in ("%~3") DO (Call Set /A "LINE+=1" & Call echo "%%LINE%%!!|@%%TOTAL_LINES%%" >NUL) && (CALL :RENAMER "%~3" && GOTO:EOF) || (Echo %%@ >> "%~nx3.NEW"))
  96. :RENAMER
  97. (REN "%~1" "%~nx1.BAK") & (MOVE /Y "%~nx1.BAK" "%TEMP%\" >NUL) & (REN "%~nx1.NEW" "%~nx1") & (GOTO:EOF)
  98.  

perdon no entiendo, el archivo textman como lo consigo? donde lo pego?
si mi texto se llama "repote.txt" cual seria la sintaxis para borrar las ultimas dos lineas?


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Eleкtro en 7 Diciembre 2012, 21:48
@lucaslopezld123

Unos comentarios más arriba te explico cual es el código que debes usar.

El archivo textman es ese, es una subrutina y se debe pegar al final de tu script batch.

Exactamente lo que debes usar, como ya te expliqué, es esto:
Código
  1.    @Echo OFF
  2.  
  3.     REM con este comando cortas las 2 últimas lineas de archivo.txt
  4.    Call :TEXTMAN L- 2 "Archivo.txt"
  5.    REM aquí el resto de tu código
  6.    Pause&Exit
  7.  
  8.  
  9.  
  10.  
  11.     REM esta parte del código la dejas abajo del todo del script
  12.    ::---------------------------------------------------------------------------
  13.    :TEXTMAN
  14.    :L-
  15.    (FOR /F %%X IN ('TYPE "%~3"') DO (CALL SET /A "TOTAL_LINES+=1")) & (CALL SET /A "TOTAL_LINES-=%~2-1") & (For /F "usebackq tokens=*" %%@ in ("%~3") DO (Call Set /A "LINE+=1" & Call echo "%%LINE%%!!|@%%TOTAL_LINES%%" >NUL) && (CALL :RENAMER "%~3" && GOTO:EOF) || (Echo %%@ >> "%~nx3.NEW"))
  16.    :RENAMER
  17.    (REN "%~1" "%~nx1.BAK") & (MOVE /Y "%~nx1.BAK" "%TEMP%\" >NUL) & (REN "%~nx1.NEW" "%~nx1") & (GOTO:EOF)
  18.  

Saludos


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: lucaslopezld123 en 16 Diciembre 2012, 22:17
@lucaslopezld123

Unos comentarios más arriba te explico cual es el código que debes usar.

El archivo textman es ese, es una subrutina y se debe pegar al final de tu script batch.

Exactamente lo que debes usar, como ya te expliqué, es esto:
Código
  1.    @Echo OFF
  2.  
  3.     REM con este comando cortas las 2 últimas lineas de archivo.txt
  4.    Call :TEXTMAN L- 2 "Archivo.txt"
  5.    REM aquí el resto de tu código
  6.    Pause&Exit
  7.  
  8.  
  9.  
  10.  
  11.     REM esta parte del código la dejas abajo del todo del script
  12.    ::---------------------------------------------------------------------------
  13.    :TEXTMAN
  14.    :L-
  15.    (FOR /F %%X IN ('TYPE "%~3"') DO (CALL SET /A "TOTAL_LINES+=1")) & (CALL SET /A "TOTAL_LINES-=%~2-1") & (For /F "usebackq tokens=*" %%@ in ("%~3") DO (Call Set /A "LINE+=1" & Call echo "%%LINE%%!!|@%%TOTAL_LINES%%" >NUL) && (CALL :RENAMER "%~3" && GOTO:EOF) || (Echo %%@ >> "%~nx3.NEW"))
  16.    :RENAMER
  17.    (REN "%~1" "%~nx1.BAK") & (MOVE /Y "%~nx1.BAK" "%TEMP%\" >NUL) & (REN "%~nx1.NEW" "%~nx1") & (GOTO:EOF)
  18.  

Saludos

Hola Muchas gracias por el aporte, consulta
es posible que el codigo tenga algun fallo? no hace lo esperado
elimina 4 lineas y mientras lo hace dice "...no puede encontrar la ubicacion"
la ruta y nombre esta ok de hecho escribe los datos, solo que no borra lo que deberia.
Gracias


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Eleкtro en 17 Diciembre 2012, 10:58
Como ya comenté había un fallo en esa función pero juraría haber posteado la correción y haber editado los comentarios con el nuevo código (Parece que no xD) :-/

Es un fallo del foro al postear el código con formato "DOS", un error el cual nadie me hace caso y no lo arreglan xD

Aqui tienes el código sin formato:

Código:
@Echo OFF
    
REM con este comando cortas las 2 últimas lineas de archivo.txt
Call :TEXTMAN L- 4 "test.txt"
REM aquí el resto de tu código
Pause&Exit
    
    
    
REM esta parte del código la dejas abajo del todo del script
::---------------------------------------------------------------------------
:TEXTMAN
:L-
(FOR /F %%X IN ('TYPE "%~3"') DO (CALL SET /A "TOTAL_LINES+=1")) & (CALL SET /A "TOTAL_LINES-=%~2-1") & (For /F "usebackq tokens=*" %%@ in ("%~3") DO (Call Set /A "LINE+=1" & Call echo "%%LINE%%"|@FIND "%%TOTAL_LINES%%" >NUL) && (CALL :RENAMER "%~3" && GOTO:EOF) || (Echo %%@ >> "%~nx3.NEW"))
:RENAMER
(REN "%~1" "%~nx1.BAK") & (MOVE /Y "%~nx1.BAK" "%TEMP%\" >NUL) & (REN "%~nx1.NEW" "%~nx1") & (GOTO:EOF)

Un saludo.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: maurorap en 17 Diciembre 2012, 23:02
Estimado:

Cuando trabajo con Edlin por ejemplo con este bloque de codigo

Código
  1. @echo off
  2. (
  3. echo 15
  4. echo String fechaExpiracion = "%fechaCaducidadLicencia%";
  5. ) | edlin licencia.jsp

este lo ocupo para reemplazar la linea 15 con el texto

String fechaExpiracion = "%fechaCaducidadLicencia%";
Al final del archivo me genera una linea, que por ejemplo con notepad es un cuadrado ( al  ingresarlo a google lo transforma en "?").
Como logro que no me ingrese esa linea despues de editar esa linea del archivo? ( en realidad lo hace al reemplazar cualquier linea)

saludos y de antemano gracias!!!


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: lucaslopezld123 en 22 Diciembre 2012, 16:40
quiero eliminar las ultimas dos lineas, ahora si funciona, pero luego todo el codigo en adelante no puede encontrar la ruta especificada.
que estoy haciendo mal?

aqui esta el codigo

Código:
@ECHO OFF
for %%i in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do if exist %%i:\INS\NINFUS set DRIVE=%%i:
ECHO INICIALIZANDO
For /l %%A in (1,1,3) do (<nul (SET/p z=.) & >nul ping 127.0.0.1 -n 2 )
%DRIVE%\Ins\reg\registros.exe
%DRIVE%\Ins\reg\Launcher.exe
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
FOR /f "tokens=1,2,3* delims=." %%a IN ('ver') DO (
SET WVer=%%a
SET WVer=!WVer:~-1!
SET WVer=!WVer!.%%b.%%c
SET WVer=!WVer:]=!
)
IF DEFINED ProgramFiles(x86) (
SET OSBit=64bits
) ELSE (
SET OSBit=32bits
)
set hora=%time%
SET DIA=%DATE%
@ECHO %DIA%>>%DRIVE%\ReporteINS.txt
@echo %COMPUTERNAME%>>%DRIVE%\ReporteINS.txt
@ECHO %OS% %osbit% ver%WVer%>>%DRIVE%\ReporteINS.txt
@echo Comenzo= %hora:~0,8%>>%DRIVE%\ReporteINS.txt
@ECHO Instalacion Incompleta>>%DRIVE%\ReporteINS.txt
@echo ------------------->>%DRIVE%\ReporteINS.txt
pause
set hora=%time%
Call :TEXTMAN L- 2 "%DRIVE%\ReporteINS.txt"

@echo Termino= %hora:~0,8%>>%DRIVE%\ReporteINS.txt
@echo Modo Automatico>>%DRIVE%\ReporteINS.txt
@echo ------------------->>%DRIVE%\ReporteINS.txt

Pause&Exit

::---------------------------------------------------------------------------
:TEXTMAN
:L-
(FOR /F %%X IN ('TYPE "%~3"') DO (CALL SET /A "TOTAL_LINES+=1")) & (CALL SET /A "TOTAL_LINES-=%~2-1") & (For /F "usebackq tokens=*" %%@ in ("%~3") DO (Call Set /A "LINE+=1" & Call echo "%%LINE%%"|@FIND "%%TOTAL_LINES%%" >NUL) && (CALL :RENAMER "%~3" && GOTO:EOF) || (Echo %%@ >> "%~nx3.NEW"))
:RENAMER
(REN "%~1" "%~nx1.BAK") & (MOVE /Y "%~nx1.BAK" "%TEMP%\" >NUL) & (REN "%~nx1.NEW" "%~nx1") & (GOTO:EOF)
::---------------------------------------------------------------------------


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Eleкtro en 22 Diciembre 2012, 17:34
quiero eliminar las ultimas dos lineas, ahora si funciona, pero luego todo el codigo en adelante no puede encontrar la ruta especificada.
que estoy haciendo mal?

No entendí bien tu problema, pero creo que he arreglado una errata en el TEXTMAN y te he mejorado el código en general, pruébalo, y si no te funciona explica mejor donde tienes problemas:

Código:
@ECHO OFF
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION

for %%i in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (if exist "%%i:\INS\NINFUS" set "DRIVE=%%i:")

ECHO INICIALIZANDO

For /l %%A in (1,1,3) do (<nul (SET/p z=.) & >nul ping 127.0.0.1 -n 2 )

%DRIVE%\Ins\reg\registros.exe 2>NUL
%DRIVE%\Ins\reg\Launcher.exe  2>NUL

FOR /F "Tokens=2 Delims==" %%# IN ('wmic os get version /Format:list') DO (Set "WVER=%%#")

IF DEFINED ProgramFiles(x86) (SET OSBit=64bits) ELSE (SET OSBit=32bits)

(
 ECHO %DATE%
 ECHO %COMPUTERNAME%
 ECHO %OS% %osbit% ver%WVer%
 ECHO Comenzo= %time:~0,8%
 ECHO Instalacion Incompleta
 ECHO ----------------------
)>>"%DRIVE%\ReporteINS.txt"


Call :TEXTMAN L- 2 "%DRIVE%\ReporteINS.txt"

(
 ECHO Termino= %time:~0,8%
 ECHO Modo Automatico
 ECHO ---------------
)>>"%DRIVE%\ReporteINS.txt"

Pause&Exit

::---------------------------------------------------------------------------
:TEXTMAN

:L-
(FOR /F %%X IN ('TYPE "%~3"') DO (CALL SET /A "TOTAL_LINES+=1")) & (CALL SET /A "TOTAL_LINES-=%~2-1") & (For /F "usebackq tokens=*" %%@ in ("%~3") DO (Call Set /A "LINE+=1" & Call echo "%%LINE%%"|@FIND "%%TOTAL_LINES%%" >NUL) && (CALL :RENAMER "%~3" && GOTO:EOF) || (Echo %%@ >> "%~3.NEW"))
:RENAMER
(REN "%~1" "%~nx1.BAK") & (MOVE /Y "%~1.BAK" "%TEMP%\" >NUL) & (REN "%~1.NEW" "%~nx1") & (GOTO:EOF)
::---------------------------------------------------------------------------


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: lucaslopezld123 en 23 Diciembre 2012, 02:51
MAESTRO!!!!!!!!!!
ALGUNAVEZ TE DIJERON QUE SOS MUY, PERO MUY GROSO!!!??
muchisimas gracias quedo perfecto!

me encantaria saber que es eso de "2>NUL"

un genio total usted! jeje :D


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Segadorfelix en 23 Diciembre 2012, 03:02
me encantaria saber que es eso de "2>NUL"
Redirige todos los errores a valor nulo.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: lucaslopezld123 en 23 Diciembre 2012, 15:03
Buen dia Segadorfelix! no se si corresponde en este foro, pero ya que estuviste viendo el codigo de arriba te queria preguntar.
el diguiente pedacito del codigo es para determinar en que unidad se ecuentra mi pendrive

codigo:
for %%i in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (if exist "%%i:\INS\NINFUS" set "DRIVE=%%i:")

anda muy bien, solo que si dejo una compactera abierta o hay una lectora de multimemoria, me tira el error "unidad no esta lista" o algo asi. doy enter y luego sigue.
Con el uso de 2>nul se puede omitir ese error o hay algun otro metodo de deteccion?


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Segadorfelix en 23 Diciembre 2012, 15:13
Pues, lucaslopezld123 creo que se puede, pero me parece mas adecuado utilizar este metodo, oculta cualquier tipo de salida

Código:
for %%i in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (if exist "%%i:\INS\NINFUS" set "DRIVE=%%i:")>NUL 2>&1
Saludos


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Eleкtro en 23 Diciembre 2012, 15:27
@lucaslopezld123
es el subforo indicado, pero no el tema indicado, lee el título del tema: "Acciones sobre archivos de texto", debes crear un post para tu pregunta

Saludos


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: lucaslopezld123 en 23 Diciembre 2012, 19:27
listo tema abierto, sigue fallando...

http://foro.elhacker.net/scripting/detectar_correctamente_unidad_de_un_pendrive-t379149.0.html


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: tienty en 23 Febrero 2013, 18:29
Hola! Soy nuevo en esto de Batch y me gustaría meter en una variable una cadena de texto de entre dos palabras/etiquetas que se encuentran en un archivo txt:
?id=xxxxxxxxxxx"

Gracias por vuestra ayuda :)


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Eleкtro en 24 Febrero 2013, 20:36
me gustaría meter en una variable una cadena de texto de entre dos palabras/etiquetas que se encuentran en un archivo txt:

Enseña la línea en concreto.

Código
  1. @Echo OFF
  2. FOR /F "Usebackq Tokens=2 Delims==>" %%# IN ("Archivo.txt") DO (SET "ID=%%#")
  3. Echo %ID%
  4. Pause&Exit

Donde "delims=" son los caracteres delimitadores.

Ejemplo:

  • Contenido del texto:
Código:
<Version revision="82870"></Version>

  • Contenido de la variable:
Código:
"82870"

Saludos.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: ignorantev1.1 en 2 Marzo 2013, 04:33
¿Cómo poner la salida de algún programa de linea de comandos a un archivo?

No sé si me explico:

Código
  1. @echo off
  2. echo miprograma.exe -suparametro >Salida.txt
  3. Pause
  4.  

Si lo hago así, en salida.txt queda "miprograma.exe -suparametro" y no el resultado de la ejecución de miprograma.exe.
(Nótese que miprograma.exe es un programa para linea de comandos)

Saludos.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Eleкtro en 2 Marzo 2013, 06:07
@ignorantev1.1
El comando "Echo" es para escribir información en la pantalla, "MiPrograma.exe" no se llega a ejecutar, sólo lo escribes en la pantalla, y mucho menos vas a poder mostrar el output de un programa que no se ha ejecutado... en resumen, no uses "Echo".

Código:
miprograma.exe -suparametro >Salida.txt

Esto es más que básico, deberías leer cualquier tutorial para principantes.

Saludos.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: ignorantev1.1 en 2 Marzo 2013, 06:34
Lo sé, el código sólo lo escribí para "darme a entender" con ustedes. ;)

¿Sí se entiende lo que pretendo hacer?

Saludos.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Eleкtro en 2 Marzo 2013, 08:56
¿Cómo poner la salida de algún programa de linea de comandos a un archivo?
Código:
miprograma.exe -suparametro >Salida.txt

Vuelve a leer mi respuesta.

Tutorial extendido de aprendizaje Batch by Elektro H@cker
· 4.6 Operadores de desplazamiento lógico (o Redireccionamiento)
(http://foro.elhacker.net/scripting/tema_bloqueado_hasta_finalizar_el_tuto_tutorial_extendido_de_aprendizaje_batch-t375135.0.html;msg1797941#msg1797941)

Saludos


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: ignorantev1.1 en 2 Marzo 2013, 16:20
Pues no, ya lo intenté como sugeriste y no sirvió.

Bueno, déjalo, asumiremos que es imposible.

Saludos y gracias.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Eleкtro en 2 Marzo 2013, 16:49
El redireccionamiento funciona para TODOS los programas que séan CommandLine.

El problema que dices tener sólo puede ser una de estas dos razones:
  • 1. Que el programa no séa CommandLineInterface
  • 2. Que no estés redireccionando la salida correcta. (Hay una salida standard y otra de errores)

En algunos programas la salida standard es la "2" por extraño que parezca (Por ejemplo en el FFMPEG), y en esos casos deberás hacer esto (Pruébalo):

Código
  1. MiPrograma.exe 2> "Archivo.txt"

De todas formas también puedes hacerlo con un FOR, AUNQUE ESTA MANERA ES MUY INCORRECTA (Porque con el redireccionamiento es suficiente, pero si dices que no te funciona...):

Código
  1. (For /F "Tokens=*" %%# in ('MiPrograma.exe') Do (Echo %%#))>"Archivo.txt"

Saludos.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Xwatmin en 19 Marzo 2013, 13:04
Buenos dias, os sigo desde hace tiempo y me ha surgido un problema que no encuentro solución.

Quiero crear un archivo bat que inicie una rom de un emulador, en este caso emulator model 2 de sega.

He hecho lo mismo con 6 emuladores distintos y nunca he tenido problema, pero justo este emulador parece que no reconociera la ruta de la rom, tan sólo he conseguido abrir el emulador con el siguiente comando:

@echo off

start emulator.exe roms/daytona.zip


Se que se puede lograr ya que he visto un portable de un emulador con una rom similar, pero por más que he probado y buscado, no doy con la solución.

Ojala me podáis ayudar, saludos y muchas gracias.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Eleкtro en 19 Marzo 2013, 13:26
@XWatmin

Acciones sobre archivos de texto. [Batch]

¿Que tiene que ver tu pregunta con la temática de este hilo?

La máquina Arcade es la que se llama "Sega model 2", el emulador todavía no sabemos cual es su nombre, hay muchos emuladores que corren roms de la SM2.

Infórmate sobre el nombre real del emulador que estás usando, después ve a la página oficial del emulador y descárgatelo, debe incluir un archivo de documentación y allí te debe indicar las opciones CommandLine del emulador para ejecutar una ROM, si la documentación no está en el emulador entonces debe estar en la página web oficial, así encontrarás lo que necesitas.

De todas formas has puesto mal el slash (la barra vertical), prueba así:
Código:
Emulator.exe ".\roms\daytona.zip"

Si te quedan dudas no sigas este tema aquí o me veré obligado a eliminarlo, haz el favor de crear un nuevo post para formular preguntas que no estén relacionadas con archivos de texto.

Saludos.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: tienty en 1 Abril 2013, 22:44
Hola! Tengo un .txt con el siguiente formato:

Código:
[FORMAT]
xxxxxxxxxxxxxx
xxxxxxxxxxxxxx
xxxxxxxxxxxxxx
[/FORMAT]

¿Cómo puedo añadir el contenido de una variable al .txt justo encima del [/FORMAT] (añadir una penúltima linea)?

Gracias :)


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Eleкtro en 3 Abril 2013, 15:21
Si el texto completo no contiene más tags podrías usar esto: http://foro.elhacker.net/empty-t372497.0.html para eliminar la última línea, y luego añadir el tag.

Ejemplo:

Código:
@Echo OFF

Call :TEXTMAN L- 1 "archivo.txt"
Echo %Variable% >> "Archivo.txt"
Echo [/FORMAT] >> "Archivo.txt"

Pause&Exit

:TEXTMAN
(SET /A "A=0", "LINE=0", "TOTAL_LINES=0")  &  (CALL :%~1 %* || (ECHO Parametro incorrecto & Exit /B 1)) & (GOTO:EOF)
:L-
(FOR /F %%X IN ('TYPE "%~3"') DO (CALL SET /A "TOTAL_LINES+=1")) & (CALL SET /A "TOTAL_LINES-=%~2-1") & (For /F "usebackq tokens=*" %%@ in ("%~3") DO (Call Set /A "LINE+=1" & Call echo "%%LINE%%"|@FIND "%%TOTAL_LINES%%" >NUL) && (CALL :RENAMER "%~3" && GOTO:EOF) || (Echo %%@ >> "%~3.NEW"))
:RENAMER
(REN "%~1" "%~nx1.BAK") & (MOVE /Y "%~1.BAK" "%TEMP%\" >NUL) & (REN "%~1.NEW" "%~nx1") & (GOTO:EOF)

De lo contrario, puedes usar un FOR /F para encontrar la cadena "[/FORMAT]" y reemplazarla por la variable y la cadena de nuevo.

PD: Con ese script también puedes reemplazar palabras.

Saludos


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Orni1 en 16 Abril 2013, 22:20
Hola no tengo mucha idea de esto por eso pido vuestra ayuda veréis:
Quisiera crear un bat que al ejecutarlo pida insertar un texto en la ventana y luego ese mismo texto se copie seguido sin espacio en todas las lineas del archivo de texto.

Ejemplo:
Tenemos el archivo file.txt con el contenido:

manolo
pepe
juan
antonio

Ahora al ejecutar el archivo .bat se abre la ventana pidiendo ingresar el texto y ponemos el texto:
tiene fruta

De ese modo el archivo file.txt quedaría:

manolotiene fruta
pepetiene fruta
juantiene fruta
antoniotiene fruta

Gracias por vuestro saber
 


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Eleкtro en 16 Abril 2013, 22:32
...Es decir: Como añadir un string al final de cada línea de un archivo de texto.

Pues así:

Código
  1. @Echo OFF
  2. Title Frutero
  3.  
  4. Set /P "InputText=Arrastra el archivo de texto... >> "
  5. Set "String= tiene fruta"
  6. Call :Writter "%InputText%" "%String%" ".\Frutero.txt"
  7. Pause&Exit
  8.  
  9. :Writter
  10. ((FOR /F "Usebackq Tokens=*" %%@ IN ("%~1") DO (Echo %%@%~2)) > %3) & (GOTO:EOF)


Saludos!


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Orni1 en 16 Abril 2013, 23:47
Lo que quiero es que en la ventana cmd pueda escribir el texto a añadir a todas las lineas del texto.
El que tu me pones la ventana cmd me pide el nombre del archivo de texto.

La idea es que partiendo del archivo frutero.txt (u otro nombre) la ventana cmd pida el texto a añadir a las lineas de ese archivo de texto.

Si no se puede con el que me das ya me apañaría editando el contenido de la linea Set "String=

Lo que varia es el texto a añadir, el nombre del archivo puede ser siempre el mismo.
Muchas gracias por tu rapidez.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Eleкtro en 17 Abril 2013, 00:18
Lo que quiero es que en la ventana cmd pueda escribir el texto a añadir a todas las lineas del texto.
El que tu me pones la ventana cmd me pide el nombre del archivo de texto.

La idea es que partiendo del archivo frutero.txt (u otro nombre) la ventana cmd pida el texto a añadir a las lineas de ese archivo de texto.

Fíjate en el código, puedes pedir el texto a introducir exáctamente de la misma manera que se puede pedir el archivo de texto en el script que te he puesto de ejemplo. Te quise poner un ejemplo de las dos maneras.

Código:
Set /P /?

Citar
El modificador /P permite establecer el valor de una variable para una línea
de entrada escrita por el usuario. Muestra la cadena del símbolo del sistema
antes de leer la línea de entrada. La cadena del símbolo del sistema puede
estar vacía.

Saludos!


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Orni1 en 17 Abril 2013, 00:36
Gracias de nuevo eres un genio, seguro que para ti esto es pecata minuta pero a mi me cuesta mucho.
He estado enredando con los script que tienes publicados en el primer post y esto es un mundo.

Un saludo


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Eleкtro en 17 Abril 2013, 00:42
pero a mi me cuesta mucho.

De lo que se trata es de aprender poco a poco, con ejemplos pero sin que te lo den todo hecho, yo ya te dí casi todo hecho, solo hay que colocar cada cosa en su sitio :P.

Intenta hacerlo y si aún no lo has conseguido postea el código que llevas y te lo corregiré en un minuti momento.

Un saludo.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: .:: KsV ::. en 5 Mayo 2013, 06:16
tengo un peqeño problema veran tengo un archivo con el contenido:

dfs
gxcf
gfbgf
xcv
adsa
etc

y quiero q qde me genere otro archivo con esta salida

dfsgxcfgfbgfxcvadsaetc

en pocas palabras q todas las lineas de un archivo queden en una sola linea




Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 5 Mayo 2013, 18:23
Código:
for /f "usebackq tokens=*" %%_ IN ("file.txt") do (
    <nul set /p "=%%_"
)


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: .:: KsV ::. en 6 Mayo 2013, 00:33
excelente  muchas gracias Genio
 ;-)  ;-)  ;-)  ;-)  ;-)  ;-)  ;-)  ;-)  ;-)  ;-)
aprovechando tengo algo mas complejo creo yo

tengo

file.txt con esto

sadv   sd    d 
sd
as  dsd
d
d s   ds
a
sdsd   sd d
ad   sdsd
ect....dsf
muchas mas lineas....

quiero q apartir de este archivo genere archivos file1.txt ,file2.txt,file3.txt..........ect
cada archivo file1.txt ,file2.txt,file3.txt....... con parte del archivo file.txt


algo asi

file.txt  archivo original

sadv   sd    d 
sd
as  dsd
d
d s   ds
a
sdsd   sd d
ad   sdsd
ect....dsf
muchas mas lineas....

:____________

file1.txt
sadv   sd    d 
sd

_____________

file2.txt
as  dsd
d
d s   ds
_____________
file3.txt
a
sdsd   sd d
ad   sdsd
ect....dsf
muchas mas lineas....
________________

no inporta la cantidad de archivos q genere






Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 6 Mayo 2013, 00:52
Código:
@echo off
setlocal enabledelayedexpansion
set /a i=0
for /f "tokens=*" %%_ in (file.txt) do (
set /a i+=1
echo %%_ > "file_!i!.txt"
)
set /p "="

Te hacen falta unas clases de ortografía, más que de programación.

Saludos.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: .:: KsV ::. en 6 Mayo 2013, 01:32
jajajaj  ya se


muchas gracias por el código y por el consejo de ortografía

pero ese código solo toma la primer linea y crea un archivo con esa linea
como se seria para que tomara mas lineas

que tome unas 10 lineas

Gracias SALUDOS



Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 6 Mayo 2013, 01:35
Lo hice así porque en ningún momento definiste con cuántas líneas había que crear el archivo o cuál sería el delimitador para saber cómo separar los archivos.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: .:: KsV ::. en 6 Mayo 2013, 01:48
siento  diferir con tigo pero si lo hice ,puse un ejemplo , pero en parte también fue mi error

ejemplo

file.txt  archivo original

sadv   sd    d 
sd
as  dsd
d
d s   ds
a
sdsd   sd d
ad   sdsd
ect....dsf
muchas mas lineas....

:____________

file1.txt
sadv   sd    d 
sd

_____________

file2.txt
as  dsd
d
d s   ds
_____________
file3.txt
a
sdsd   sd d
ad   sdsd
ect....dsf
muchas mas lineas....
________________



 :D


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 6 Mayo 2013, 01:50
Ajá, pero pones un ejemplo ...

¿Con cuántas líneas debe salir el primer archivo? y el segundo? el tercero?

Especifícalo, no tenemos por qué estar adivinando.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: amslop en 3 Junio 2013, 12:56
Hola! Acabo de ver el articulo sobre "Acciones sobre archivos de texto" y la verdad que me ha ayudado bastante, pero no consigo encontrar una solución a lo que quiero hacer (es una practica que me han mandado para clase, pero no tengo idea de como hacerla):

Pidiendo una frase por teclado, buscar en dicha frase el una palabra que nos dan después.

Había pensado meter la frase en una variable y luego, dentro de esa variable, cambiar los espacios por saltos de linea e introducirlo todo en un documento de texto. Muy bonito todo, pero no sé como meter una frase dentro de una variable ni como cambiar los espacios por saltos de línea.

Espero que podáis ayudarme. Gracias :)


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: MauriH en 12 Septiembre 2013, 18:46
Hola Leo,
Me parece muy bueno el post, pero no encontré (o de pronto no me di cuenta) alguna consulta q se relacione con mi problema, verás tengo dos archivos, uno de ellos es un banco de preguntas (examen) tipo opción múltiple, cada pregunta tiene 5 opciones, y el otro archivo es el archivo de respuestas, donde estan listadas todas las respuestas en el orden en q aparece las preguntas en el archivo de preguntas. Lo q quiero saber es como puedo yo hacer para poder buscar por medio de un archivo .bat todo lo q esta en el archivo de respuestas en el archivo de preguntas e ir marcando esas coincidencias con una palabra clave, quisiera q esa palabra clave figure antes y despues de la opcion correcta. No es necesario una palabra clave para marcar cada una de las opciones correctas, esta bien, de hecho mejor si es la misma para todas las coincidencias, espero haberme explicado. Gracias.
Te mando una parte de lo q seria el archivo de preguntas y de respuestas, estos son respectivamente:

Archivo de preguntas:

El masaje cardiaco externo:
• No se realiza en recién nacidos
• Se realiza en la mitad superior del esternón en el adulto
• Produce un flujo sanguíneo 25 % del normal
• No esta indicado en la fibrilación ventricular sostenida
• Todas las anteriores

La administración intracardiaca de drogas durante RCP:
• Requiere mayor dosis de drogas
• Puede producir lesión irreversible en el corazón
• Es la vía de elección en la reanimación a tórax abierto
• La vía de abordaje es paraesternal izquierda
• Todas son ciertas

La adrenalina:
• Posee efecto beta predominante
• Se sintetiza en el hígado
• Tiene mayor efecto en la acidosis metabolica
• Aumenta la presión de perfusión durante la RCP
• Todas

Para diagnosticar la circulación ineficaz:
• El ECG es el método de elección
• Palpar el pulso en la arteria femoral o carótida
• Se han descrito alteraciones en el metabolismo de los ácidos grasos libres
• Ausencia de reflejos fotomotores
• Todas

En la evaluación preoperatoria de un paciente ASA I de 30 años es indispensable:
• Solicitar un ECG de rutina
• Abetalipoproteinemia
• Realizar un examen clínico completo
• Solicitar un coagulograma de rutina
• Todas
Archivo de respuestas:

• Todas las anteriores
• Todas son ciertas
• Se sintetiza en el hígado
• Se han descrito alteraciones en el metabolismo de los ácidos grasos libres
• Abetalipoproteinemia
Y quisiera obtener algo así:

El masaje cardiaco externo:
• No se realiza en recién nacidos
• Se realiza en la mitad superior del esternón en el adulto
• Produce un flujo sanguíneo 25 % del normal
• No esta indicado en la fibrilación ventricular sostenida
• monordi1Todas las anterioresmonordi2

La administración intracardiaca de drogas durante RCP:
• Requiere mayor dosis de drogas
• Puede producir lesión irreversible en el corazón
• Es la vía de elección en la reanimación a tórax abierto
• La vía de abordaje es paraesternal izquierda
• monordi1Todas son ciertasmonordi2

La adrenalina:
• Posee efecto beta predominante
• monordi1Se sintetiza en el hígadomonordi2
• Tiene mayor efecto en la acidosis metabolica
• Aumenta la presión de perfusión durante la RCP
• Todas

Para diagnosticar la circulación ineficaz:
• El ECG es el método de elección
• Palpar el pulso en la arteria femoral o carótida
• monordi1Se han descrito alteraciones en el metabolismo de los ácidos grasos libresmonordi2
• Ausencia de reflejos fotomotores
• Todas

En la evaluación preoperatoria de un paciente ASA I de 30 años es indispensable:
• Solicitar un ECG de rutina
• monordi1Abetalipoproteinemiamonordi2
• Realizar un examen clínico completo
• Solicitar un coagulograma de rutina
• Todas


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: pincharata en 12 Septiembre 2013, 21:18
Hola a todos, quisiera saber si pueden ayudarme con un archivo de texto donde todos los dias me dejan un log de la siguiente manera (aclaro que esta cortado pero tiene miles de filas):

name-label ( RW)       : XXXX01
memory-actual ( RO): 3435969740
VCPUs-number ( RO): 
name-label ( RW)       : Control domain on host: ZZZZ01
memory-actual ( RO): 78695628
VCPUs-number ( RO): 
os-version (MRO):  in database
name-label ( RW)       : Control domain on host: ZZZZ02
memory-actual ( RO): 78695628
VCPUs-number ( RO): 
os-version (MRO):  in database
name-label ( RW)       : XXXX02
memory-actual ( RO): 6871943168
VCPUs-number ( RO): 
name-label ( RW)       : XXXX03
memory-actual ( RO): 6871943577
VCPUs-number ( RO): 
name-label ( RW)       : XXXX04
memory-actual ( RO): 6871943168
VCPUs-number ( RO): 

Lo que necesito hacer es que elimine el salto de linea y lo remplace por una coma, a excepcion de las líneas que empiezan con "name-label", tras lo cual el archivo deberia de quedar:

name-label ( RW)       : XXXX01, memory-actual ( RO): 3435969740, VCPUs-number ( RO): 
name-label ( RW)       : Control domain on host: ZZZZ01, memory-actual ( RO): 78695628, VCPUs-number ( RO): , os-version (MRO):  in database
name-label ( RW)       : Control domain on host: ZZZZ02, memory-actual ( RO): 78695628, VCPUs-number ( RO): , os-version (MRO):  in database
name-label ( RW)       : XXXX02, memory-actual ( RO): 6871943168, VCPUs-number ( RO): 
name-label ( RW)       : XXXX03, memory-actual ( RO): 6871943577, VCPUs-number ( RO):
name-label ( RW)       : XXXX04, memory-actual ( RO): 6871943168, VCPUs-number ( RO):

Gracias a un aporte de Leo Gutierrez logro quitar el salto con el codigo:

Código:
for /f "tokens=*" %%_ in (file.txt) do (<nul set /p "=%%_ "; >> listar2.txt)

Muchas gracias.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 13 Septiembre 2013, 04:33
@pincharata

A ver si te funciona esto.

Código
  1. @echo off
  2.  
  3. for /f "tokens=*" %%_ in (file2.txt) do (
  4. echo %%_ | findstr /r "^name" > nul 2>&1 && (
  5. echo. >> end.txt
  6. )
  7. echo %%_ | findstr /r "^name" > nul 2>&1 && (
  8. <nul set /p "=%%_ " >> end.txt
  9. ) || (
  10. <nul set /p "=, %%_ " >> end.txt
  11. )
  12. )
  13.  

También podrías utilizar un script en Powershell:

Código
  1. [String]$line = "";
  2. foreach($line in $(Get-Content "$psscriptroot\file2.txt")) {
  3.    $line = $line.Trim().TrimEnd().TrimStart();
  4.  
  5.    if($line.StartsWith("name-label")) {
  6.        Write-Host
  7.    }
  8.  
  9.    if($line.StartsWith("name-label")) {
  10.        Write-Host [${line}] -NoNewline
  11.    } else {
  12.        Write-Host [${line}] -NoNewline
  13.    }
  14.  
  15. }

@MauriH Lo verifico esta noche y te comento qué tal.

Saludos.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 13 Septiembre 2013, 07:31
Hola Leo,
Me parece muy bueno el post, pero no encontré (o de pronto no me di cuenta) alguna consulta q se relacione con mi problema, verás tengo dos archivos, uno de ellos es un banco de preguntas (examen) tipo opción múltiple, cada pregunta tiene 5 opciones, y el otro archivo es el archivo de respuestas, donde estan listadas todas las respuestas en el orden en q aparece las preguntas en el archivo de preguntas. Lo q quiero saber es como puedo yo hacer para poder buscar por medio de un archivo .bat todo lo q esta en el archivo de respuestas en el archivo de preguntas e ir marcando esas coincidencias con una palabra clave, quisiera q esa palabra clave figure antes y despues de la opcion correcta. No es necesario una palabra clave para marcar cada una de las opciones correctas, esta bien, de hecho mejor si es la misma para todas las coincidencias, espero haberme explicado. Gracias.
Te mando una parte de lo q seria el archivo de preguntas y de respuestas, estos son respectivamente:

Archivo de preguntas:

El masaje cardiaco externo:
• No se realiza en recién nacidos
• Se realiza en la mitad superior del esternón en el adulto
• Produce un flujo sanguíneo 25 % del normal
• No esta indicado en la fibrilación ventricular sostenida
• Todas las anteriores

La administración intracardiaca de drogas durante RCP:
• Requiere mayor dosis de drogas
• Puede producir lesión irreversible en el corazón
• Es la vía de elección en la reanimación a tórax abierto
• La vía de abordaje es paraesternal izquierda
• Todas son ciertas

La adrenalina:
• Posee efecto beta predominante
• Se sintetiza en el hígado
• Tiene mayor efecto en la acidosis metabolica
• Aumenta la presión de perfusión durante la RCP
• Todas

Para diagnosticar la circulación ineficaz:
• El ECG es el método de elección
• Palpar el pulso en la arteria femoral o carótida
• Se han descrito alteraciones en el metabolismo de los ácidos grasos libres
• Ausencia de reflejos fotomotores
• Todas

En la evaluación preoperatoria de un paciente ASA I de 30 años es indispensable:
• Solicitar un ECG de rutina
• Abetalipoproteinemia
• Realizar un examen clínico completo
• Solicitar un coagulograma de rutina
• Todas
Archivo de respuestas:

• Todas las anteriores
• Todas son ciertas
• Se sintetiza en el hígado
• Se han descrito alteraciones en el metabolismo de los ácidos grasos libres
• Abetalipoproteinemia
Y quisiera obtener algo así:

El masaje cardiaco externo:
• No se realiza en recién nacidos
• Se realiza en la mitad superior del esternón en el adulto
• Produce un flujo sanguíneo 25 % del normal
• No esta indicado en la fibrilación ventricular sostenida
• monordi1Todas las anterioresmonordi2

La administración intracardiaca de drogas durante RCP:
• Requiere mayor dosis de drogas
• Puede producir lesión irreversible en el corazón
• Es la vía de elección en la reanimación a tórax abierto
• La vía de abordaje es paraesternal izquierda
• monordi1Todas son ciertasmonordi2

La adrenalina:
• Posee efecto beta predominante
• monordi1Se sintetiza en el hígadomonordi2
• Tiene mayor efecto en la acidosis metabolica
• Aumenta la presión de perfusión durante la RCP
• Todas

Para diagnosticar la circulación ineficaz:
• El ECG es el método de elección
• Palpar el pulso en la arteria femoral o carótida
• monordi1Se han descrito alteraciones en el metabolismo de los ácidos grasos libresmonordi2
• Ausencia de reflejos fotomotores
• Todas

En la evaluación preoperatoria de un paciente ASA I de 30 años es indispensable:
• Solicitar un ECG de rutina
• monordi1Abetalipoproteinemiamonordi2
• Realizar un examen clínico completo
• Solicitar un coagulograma de rutina
• Todas

Hola @MauriH

¿Podrías por favor un ejemplo de cómo quisieras la salida del archivo final o de lo que quisieras obtener?

Es que no me queda claro como quieres relacionar el archivo de preguntas y de respuestas con un archivo final.

Saludos.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: pincharata en 13 Septiembre 2013, 14:50
@pincharata

A ver si te funciona esto.

Código
  1. @echo off
  2.  
  3. for /f "tokens=*" %%_ in (file2.txt) do (
  4. echo %%_ | findstr /r "^name" > nul 2>&1 && (
  5. echo. >> end.txt
  6. )
  7. echo %%_ | findstr /r "^name" > nul 2>&1 && (
  8. <nul set /p "=%%_ " >> end.txt
  9. ) || (
  10. <nul set /p "=, %%_ " >> end.txt
  11. )
  12. )
  13.  

También podrías utilizar un script en Powershell:

Código
  1. [String]$line = "";
  2. foreach($line in $(Get-Content "$psscriptroot\file2.txt")) {
  3.    $line = $line.Trim().TrimEnd().TrimStart();
  4.  
  5.    if($line.StartsWith("name-label")) {
  6.        Write-Host
  7.    }
  8.  
  9.    if($line.StartsWith("name-label")) {
  10.        Write-Host [${line}] -NoNewline
  11.    } else {
  12.        Write-Host [${line}] -NoNewline
  13.    }
  14.  
  15. }

@MauriH Lo verifico esta noche y te comento qué tal.

Saludos.

Leo, muchas gracias, pero lo acabo de ejecutar y verificar con mayor detenimiento y veo que repite en la salida el resultado de la búsqueda "name", por más que intento entender y modificar el script estoy muy lejos de ello y no logro corregirlo...  lamento molestarte nuevamente a ver si podrás ayudarme.

Utilizo el script en batch por que el de powershell no me funcionó en absoluto (la salida es por pantalla y no escribe en ningún archivo, puede ser?).

La salida final que obtengo es:
Citar

name-label ( RW)       : XXXX01  , name-label ( RW)       : XXXX01  , memory-actual ( RO): 3435969740  , VCPUs-number ( RO):   
name-label ( RW)       : Control domain on host: ZZZZ01  , name-label ( RW)       : Control domain on host: ZZZZ01  , memory-actual ( RO): 78695628  , VCPUs-number ( RO):   , os-version (MRO):  in database   
name-label ( RW)       : Control domain on host: ZZZZ02 , name-label ( RW)       : Control domain on host: ZZZZ02 , memory-actual ( RO): 78695628  , VCPUs-number ( RO):   , os-version (MRO):  in database   
name-label ( RW)       : XXXX02  , name-label ( RW)       : XXXX02  , memory-actual ( RO): 6871943168  , VCPUs-number ( RO):   
name-label ( RW)       : XXXX03  , name-label ( RW)       : XXXX03  , memory-actual ( RO): 6871943577  , VCPUs-number ( RO):   
name-label ( RW)       : XXXX04  , name-label ( RW)       : XXXX04  , memory-actual ( RO): 6871943168  , VCPUs-number ( RO):   



Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: togangel en 15 Septiembre 2013, 11:33
Hola a todos un gran saludo, los felicito por este tutorial en el cual me he basado en aprender un poco de este tema. Sin embargo tengo una consuta que hacerles, ya que he buscado por todos lados y no logro encontrarlo ya que estoy chamaco en esto.

Estoy buscando un Batch más reducido en el cual se este automatizando algunas configuraciones en el equipo, por ejemplo tengo este:

Código:

@echo off
color 0a
Mode con cols=46 lines=28
Title .:: %computername% ::. - .:: %username% ::.

:ip
set /p suc= Numero de area (ej. 290) :
cls

set /p ter= Numero de terminal IP ( ej. 120 ) :
cls

set /a suc2=%suc%-250
set ip=10.40.%suc2%.%ter%
set maskar=255.255.255.0
set get=110.40.%suc2%.1
set dns1=110.30.2.22
set dns2=110.1.5.11

netsh interface ip set address name="Conexi¢n de  rea local" source=static addr=%ip% mask=%maskar% gateway=%get% store=persistent
netsh interface ip set dnsservers name="Conexi¢n de  rea local" source=static addr=%dns1%
netsh interface ip add dnsservers name="Conexi¢n de  rea local" addr=%dns2% index=2

:vw
cls
echo  Area %suc% Terminal %ter%
echo.
echo  Ip       %ip%
echo  Marcara  %maskar%
echo  GateWay  %get%
echo  DNS 1    %dns1%
echo  DNS 2    %dns2%
timeout /nobreak 03

:pw
cls
set admn=Administrador
set admp=Admin$2011.1
set usern=Usuario
set userp=User$2011.1

net user "%admn%" %admp%
echo Usuario    %admn%
echo Contrase a %admp%
timeout /nobreak 03

net user "%usernn%" %userp%
echo Usuario    %usern%
echo Contrase a %userp%
timeout /nobreak 03

:fin
cls
tasklist>"%temp%\tsk.tmp"
set tp="%temp%\tsk.tmp"

set p1=Firefox.exe
set p2=explorer.exe
set inst1=%homedrive%\programas\programa1.exe
set inst2=%homedrive%\programas\programa2.exe

set ins=0

:p1
<"%tp%" find /c /i "%p1%"> NUL
if %ERRORLEVEL% EQU 0 (
goto pok) else (
goto pno)

:pok
cls
color 0a
echo  El Programa %p1% Esta instalado correctamente
pause>nul
goto p2

:pno
cls
color 0c
echo  El Programa %p1% No se esta ejecutando correctamente
echo.
echo  Presione 1 + [Enter] para instalarlo
echo.
set /p ins=
if %ins% == 0 (goto p2)
if %ins% == 1 (goto inst1)

:inst1
"%inst1%"

:p2
<"%tp%" find /c /i "%p2%"> NUL
if %ERRORLEVEL% EQU 0 (
goto p2ok) else (
goto p2no)

:p2ok
color 0a
cls

echo  El Programa %p2% Esta instalado correctamente
pause>nul
goto exit

:p2no
cls
color 0c
echo  El Programa %p2% No se esta ejecutando correctamente
echo.
echo  Presione 1 + [Enter] para instalarlo
echo.
set /p ins=
if %ins% == 0 (goto exit)
if %ins% == 1 (goto inst2)

:inst2
"%inst2%"

:exit
del /f /q %tp%
exit


Aquí lo que estoy intentando es que al checar en Tasklist se encuentren los programas ejecutando, en caso contrario Tener la opción de Instalarlo desde un directorio en C:\bla\bla.exe.

Sí me funciona muy bien este Batch que he hecho pero...

La cuestión es si en la variable :fin se puede simplificar con algun for o tomar el nombre del programa y usarlo como una variable, ya que siento que esta muy extenso. Así mismo si se tomara como variable utilizarlo despues para otros usos, un ejemplo. Terminar con procesos no deseados

Sin más por el momento, me gustaria tener algo de ayuda Genios!!!

Muchas Gracias.


Título: Hacer batch para
Publicado por: Pédrin-2 en 15 Septiembre 2013, 16:50
Hola soy nuevo en esto, y quiero aprender lo veo muy interesante.
Lo que necesito creo que no es dificil, despues de ver por encima lo que se hace.

Lo explico:
Dentro de una carpeta tengo todo tipo de archivos, desde .avi, .flv, xls, etc..

que al ejecutar el batch me creara una carpeta " extensiones" y dentro creara
por cada archivo real ( ejemplo:  video 1.avi ) un  ( txt ), pero con la misma extension del original
Evidentemento el archivo creado no se vera nada, tamaño en carpeta 0.

No se si me he explicado bien

Un saludo y espero que podais ayudar a un novato



Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 15 Septiembre 2013, 18:55
Hola soy nuevo en esto, y quiero aprender lo veo muy interesante.
Lo que necesito creo que no es dificil, despues de ver por encima lo que se hace.

Lo explico:
Dentro de una carpeta tengo todo tipo de archivos, desde .avi, .flv, xls, etc..

que al ejecutar el batch me creara una carpeta " extensiones" y dentro creara
por cada archivo real ( ejemplo:  video 1.avi ) un  ( txt ), pero con la misma extension del original
Evidentemento el archivo creado no se vera nada, tamaño en carpeta 0.

No se si me he explicado bien

Un saludo y espero que podais ayudar a un novato

Hola @Pédrin-2, por favor deja un ejemplo de salida.

O sea, déjame un ejemplo hipotético de cómo quedaría, por que la verdad no te he entendido esta parte:

Citar
dentro creara
por cada archivo real ( ejemplo:  video 1.avi ) un  ( txt ), pero con la misma extension del original

¿¿Cómo que un archivo txt pero con la misma extensión del archivo original?

¿Te refieres a que se crearía un archivo igual que el original pero vacío?

Si es así esto podría servir:
Código
  1. @echo off
  2. set "work_dir=trunk"
  3. if not exist %work_dir%\extensiones (
  4.    mkdir "%work_dir%\extensiones" && (
  5.        echo Directorio "%work_dir%\extensiones" creado
  6.    )
  7. )
  8. pushd "%work_dir%"
  9. for /f "tokens=*" %%_ in ('dir /b /a-d .') do (
  10.    echo. > "extensiones\%%_"
  11. )
  12. popd
  13. pause


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Pédrin-2 en 16 Septiembre 2013, 10:35
Hola Leo muchisimas gracias por ayudarme.

Tengo una carpeta: Mis Peliculas, dentro hay:
spìderman.avi  = 700 mb
cars.avi = 700 mb
foto1.jpg = 6 mb, etc...

el resultado dentro de esa misma carpeta seria:
Carpeta: Extensiones dentro:
spìderman.avi  = 0 mb
cars.avi = 0 mb
foto1.jpg = 0 mb, etc...

Espero que se me entienda.

El ejemplo que me pones me crea dos carpetas una llamada trunk que no es necesaria y la otra de extensiones es la que necesito, pero el bat me dice que no encuentra nada.

Un saludo



Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Eleкtro en 16 Septiembre 2013, 17:28
Lo que yo no entiendo es: ¿En la carpeta "Extensiones" deben ir todos los archivos sin importar la extension?, si fuese así entonces que le encuentras de beneficioso?, sería simplemente una copia nula (tamaño cero) de los mismo archivos.

¿O acaso quieres un txt por cada extension?, dentro de la carpeta "Extensiones".

Hice este código que genera una carpeta "Extensiones" por cada directorio y subdirectorio, dentro de la carpeta "Extensiones" se genera una serie de archivos "LOG" con el nombre de cada extension (Ejemplo: .avi.log), y dentro de cada archivo log están registrados los archivos de dicha extension.

Código
  1. @Echo OFF
  2. REM By Elektro H@cker
  3.  
  4. Set "Extensions="
  5.  
  6. :: No usar FOR /D /R para no crear conflictos en tiempo de ejecución entre el otro FOR al procesar carpetas.
  7. For /F "Delims=" %%D in ('DIR /B /S /AD "%CD%\*"') Do (Call :List "%%D")
  8. Echo [+] Terminado!
  9. Pause&Exit
  10.  
  11. :List
  12. Echo Procesando directorio "%~1"
  13. MKDIR "%~1\Extensiones" 2>NUL
  14.  
  15. FOR %%IN ("%~1\*.*") DO (
  16. Call Echo "%%Extensions%%!!|%%~x€" 1>NUL || (
  17. Call Set "Extensions=%%Extensions%%!!%%~x€"
  18. Echo Procesando archivos "%%~x€"
  19. (FOR %%# IN ("*%%~x€") DO (Echo %%#))>"%~1\Extensiones\%%~x€.log"
  20. )
  21. )
  22.  
  23. Echo+ | MORE
  24. Set "Extensions="
  25. GOTO:EOF

Saludos



Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 16 Septiembre 2013, 17:50
Código
  1. @echo off
  2. if not exist extensiones (
  3.    mkdir "extensiones" && (
  4.        echo Directorio "extensiones" creado
  5.    )
  6. )
  7. for /f "tokens=*" %%_ in ('dir /b /a-d .') do (
  8.    echo. 2> "extensiones\%%_"
  9. )
  10. pause

Prueba ese código, el .bat tiene que estar en el mismo directorio donde están tus .xls, .avi, .flv, etc.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Pédrin-2 en 16 Septiembre 2013, 18:52
Fantastico Leo justo lo que necesitaba

Hola EleKtro H@cker, gracias por tu interes.

Un Saludo a los dos


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: MauriH en 17 Septiembre 2013, 21:10
Hola @MauriH

¿Podrías por favor un ejemplo de cómo quisieras la salida del archivo final o de lo que quisieras obtener?

Es que no me queda claro como quieres relacionar el archivo de preguntas y de respuestas con un archivo final.

Saludos.

Hola Leo, en mi anterior consulta te puse el ejemplo del archivo final, de pronto no lo viste por q esta todo muy junto, aqui te lo pongo de nuevo:

Archivo de preguntas:

1. El masaje cardiaco externo:
• No se realiza en recién nacidos
• Se realiza en la mitad superior del esternón en el adulto
• Produce un flujo sanguíneo 25 % del normal
• No esta indicado en la fibrilación ventricular sostenida
• Todas las anteriores

2. La administración intracardiaca de drogas durante RCP:
• Requiere mayor dosis de drogas
• Puede producir lesión irreversible en el corazón
• Es la vía de elección en la reanimación a tórax abierto
• La vía de abordaje es paraesternal izquierda
• Todas son ciertas

3. La adrenalina:
• Posee efecto beta predominante
• Se sintetiza en el hígado
• Tiene mayor efecto en la acidosis metabolica
• Aumenta la presión de perfusión durante la RCP
• Todas

4. Para diagnosticar la circulación ineficaz:
• El ECG es el método de elección
• Palpar el pulso en la arteria femoral o carótida
• Se han descrito alteraciones en el metabolismo de los ácidos grasos libres
• Ausencia de reflejos fotomotores
• Todas

5. En la evaluación preoperatoria de un paciente ASA I de 30 años es indispensable:
• Solicitar un ECG de rutina
• Abetalipoproteinemia
• Realizar un examen clínico completo
• Solicitar un coagulograma de rutina
• Todas


Archivo de respuestas:

Respuesta de la pregunta 1 :• Todas las anteriores
Respuesta de la pregunta 2 :• Todas son ciertas
Respuesta de la pregunta 3 :• Se sintetiza en el hígado
Respuesta de la pregunta 4 :• Se han descrito alteraciones en el metabolismo de los ácidos grasos libres
Respuesta de la pregunta 5 :• Abetalipoproteinemia

Nota. El texto q aparece en cursiva, realmente no aparece en mis archivos de texto, solo lo puse de un modo aclaratorio.


Archivo Final

1. El masaje cardiaco externo:
• No se realiza en recién nacidos
• Se realiza en la mitad superior del esternón en el adulto
• Produce un flujo sanguíneo 25 % del normal
• No esta indicado en la fibrilación ventricular sostenida
monordi1Todas las anterioresmonordi2

2. La administración intracardiaca de drogas durante RCP:
• Requiere mayor dosis de drogas
• Puede producir lesión irreversible en el corazón
• Es la vía de elección en la reanimación a tórax abierto
• La vía de abordaje es paraesternal izquierda
monordi1Todas son ciertasmonordi2

3. La adrenalina:
• Posee efecto beta predominante
monordi1Se sintetiza en el hígadomonordi2
• Tiene mayor efecto en la acidosis metabolica
• Aumenta la presión de perfusión durante la RCP
• Todas

4. Para diagnosticar la circulación ineficaz:
• El ECG es el método de elección
• Palpar el pulso en la arteria femoral o carótida
monordi1Se han descrito alteraciones en el metabolismo de los ácidos grasos libresmonordi2
• Ausencia de reflejos fotomotores
• Todas

5. En la evaluación preoperatoria de un paciente ASA I de 30 años es indispensable:
• Solicitar un ECG de rutina
monordi1Abetalipoproteinemiamonordi2
• Realizar un examen clínico completo
• Solicitar un coagulograma de rutina
• Todas

La idea es leer una por una las líneas de un archivo (el archivo de respuestas) y buscarlas en otro archivo (el archivo de preguntas) y poner una palabra delante y otra detras de cada coincidencia. Por si acaso uso Windows7, gracias de antemano. Un saludo.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Eleкtro en 23 Septiembre 2013, 20:33
@MauriH

Código
  1. @Echo OFF
  2.  
  3. Set "Questions=C:\Preguntas.txt"
  4. Set "Answers=C:\Respuestas.txt"
  5.  
  6. Set "Prefix=nothing"
  7. Set "Suffix=nothing"
  8.  
  9. FOR /F "Usebackq Delims=" %%R IN ("%Answers%") DO (
  10. FOR /F "Usebackq Delims=" %%P IN ("%Questions%") DO (
  11. (
  12. If /I "%%R" EQU "%%P" (Echo %PREFIX%%%P%SUFFIX%) Else (Echo %%P)
  13. )>>"%TEMP%\Questions.tmp"
  14. )
  15. Move /Y "%TEMP%\Questions.tmp" "%Questions%" 1>NUL || (Echo ERROR al reemplazar archivo & Goto :OnError)
  16. )
  17.  
  18. :OnError
  19. Pause&Exit

PD: Antes de usar haz una copia del archivo original por precaución.

Saludos!


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: MauriH en 24 Septiembre 2013, 00:47
@MauriH

Código
  1. @Echo OFF
  2.  
  3. Set "Questions=C:\Preguntas.txt"
  4. Set "Answers=C:\Respuestas.txt"
  5.  
  6. Set "Prefix=nothing"
  7. Set "Suffix=nothing"
  8.  
  9. FOR /F "Usebackq Delims=" %%R IN ("%Answers%") DO (
  10. FOR /F "Usebackq Delims=" %%P IN ("%Questions%") DO (
  11. (
  12. If /I "%%R" EQU "%%P" (Echo %PREFIX%%%P%SUFFIX%) Else (Echo %%P)
  13. )>>"%TEMP%\Questions.tmp"
  14. )
  15. Move /Y "%TEMP%\Questions.tmp" "%Questions%" 1>NUL || (Echo ERROR al reemplazar archivo & Goto :OnError)
  16. )
  17.  
  18. :OnError
  19. Pause&Exit

PD: Antes de usar haz una copia del archivo original por precaución.

Saludos!

Hola, me parece muy bueno el codigo, gracias por la pronta respuesta  ;-), nada más tengo el problema de q busca cada linea del archivo de respuestas en todo el archivo de preguntas y marca todas las coincidencias, y eso no es bueno ya q muchas veces las opciones se repiten en varias preguntas (por ejemplo la ultima opción en las preguntas 3, 4 y 5) y no necesariamente son correctas todas, eso provoca q se marquen 2 o más opciones como correctas. Lo q quisiera es q una vez q encontró una coincidencia ya no siga buscando y pase a buscar la siguiente linea del archivo de respuestas, en el archivo de preguntas, pero q continue buscando a partir de donde se quedó en archivo de preguntas y no desde el principio.
No sé si me explique correctamente y tampoco sé si tal cosa es posible, espero vuestras respuestas. Muchas gracias por la ayuda.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Eleкtro en 24 Septiembre 2013, 08:34
@MauriH

Es decir,  por poner un ejemplo, si tienes un archivo de preguntas de 200 lineas, y un archivo de respuestas con dos respuestas (2 lineas) donde la primera coincidencia de la primera respuesta (linea 1) coincide con la linea 190 del archivo de preguntas, ¿entonces la respuesta 2 debería empezar a buscar desde esa linea 190?.

Saludos


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: MauriH en 24 Septiembre 2013, 16:35
@EleKtro H@cker

Pues verás básicamente si, esa es una de las ideas q tuve para evitar q se marcaran por error dos opciones como correctas en una misma pregunta. La otra idea es q una vez q sea encontrada una coincidencia en el archivo de preguntas, ya no siga buscando, por que ahorita eso es lo q hace, busca una linea en todo el archivo de preguntas y marca todas las coincidencias q encuentra, pero yo quisiera q solo marque la primera y así se evitaría marcar otras opciones q no son correctas, y si se podría hacer q la segunda linea del archivo de preguntas comenzase a buscar partir de la coincidencia marcada por la primera seria genial, bueno eso es lo q se me ocurrió, pero en verdad no pude lograrlo escribiendo código, recién llevo poco tiempo practicando batch. Es q como te dije hay muchas opciones q se repiten en el archivo de preguntas y no necesariamente son correctas. Hay q tener en cuenta q todas las preguntas tienen una sola opción correcta y q hay exactamente la misma cantidad de preguntas en el archivo de preguntas como lineas en el archivo de respuestas, por ejemplo si tengo 600 preguntas, tengo 600 respuestas (en 600 lineas) y estas están en el mismo orden.
 :¬¬ Gracias.

PD. Te parece si te envío los archivos de preguntas y respuestas para q puedas ver su estructura?


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Eleкtro en 24 Septiembre 2013, 17:20
no pude lograrlo escribiendo codigo

Es facil, simula una variable Booleana para usarla como Flag:

Código
  1. @Echo OFF & Setlocal EnableDelayedExpansion
  2.  
  3.  
  4.  
  5. Set "Questions=C:\Preguntas.txt"
  6. Set "Answers=C:\Respuestas.txt"
  7.  
  8. Set "Prefix=nothing"
  9. Set "Suffix=nothing"
  10.  
  11. Set "IsMatch=False" & REM No tocar esta variable!
  12.  
  13.  
  14.  
  15. Del /Q "%TEMP%\Questions.tmp" 2>NUL
  16.  
  17. FOR /F "Usebackq Delims=" %%R IN ("%Answers%") DO (
  18.  
  19. FOR /F "Usebackq Delims=" %%P IN ("%Questions%") DO (
  20.  
  21. (If /I "%%R" EQU "%%P" (
  22. If /I "!IsMatch!" NEQ "True" (
  23. Echo %PREFIX%%%P%SUFFIX%
  24. ) Else (
  25. Echo %%P
  26. )
  27. Set "IsMatch=True"
  28. ) Else (
  29. Echo %%P
  30. ))>>"%TEMP%\Questions.tmp"
  31.  
  32. ) & REM # End For "%Questions%"
  33.  
  34. Set "IsMatch=False"
  35. Move /Y "%TEMP%\Questions.tmp" "%Questions%" 1>NUL 2>&1 || (Echo ERROR al reemplazar archivo & Goto :OnError)
  36.  
  37. ) & REM # End For "%Answers%"
  38.  
  39. :OnError
  40. Pause&Exit

Saludos!


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: MauriH en 24 Septiembre 2013, 18:28
@EleKtro H@cker

Siento decirte q aun no me funciona como quisiera, me sigue marcando varias opciones como correctas en la misma pregunta, y algunas no me marco nada. Pienso q de pronto lo q esta haciendo es buscar la primera linea, encuentra la coincidencia y luego busca la segunda linea a partir de la primera coincidencia marcada, pero la tercera q deberia buscar a partir de la 2 coincidencia marcada sigue buscando a partir de la primera, no sé si me equivoco, pero aun estoy en problemas. Gracias por el interés, pero aún no doy con la solución, espero tu puedas.  :-[

Modifico:

Bueno acabo de revisar minuciosamente lo q hizo el codigo y me di cuenta de dos cosas, hizo lo q te dije en mi parrafo anterior, y la otra es q al parecer esto del Batch da para mucho, así q tuve una nueva idea para q eso no vuelva suceder, idea q por supuesto no podré lograr sin tu ayuda. Así q aqui te adjunto una extracto de ambos archivos tal y como son:


Preguntas.txt

#En la evaluación preoperatoria de un paciente ASA I de 30 años es indispensable:
• Solicitar un ECG de rutina
• Rx de tórax
• Realizar un examen clínico completo
• Solicitar un coagulograma de rutina
• Todas
#La detención súbita y completa de circulación se expresa:
• Midriasis a los 60 seg.
• Por pCO2 en sangre arterial baja
• Por acumulo de acido láctico en los tejidos periféricos
• Respiración boqueante o apnea
• Todas
#El masaje cardiaco externo puede producir un cierto grado de flujo sistémico y pulmonar por:
• Acción de la bomba cardiaca y torácica durante las compresiones
• Diferencias de presión entre la aurícula y el ventrículo
• Diferencias de presión aortico pulmonares
• Mecanismo valvular aortico
• Ninguna
#Cual es la conducta terapéutica en UTI en el síndrome de Stokes Adams:
• Atropina
• Beta adrenergicos
• Inserción de marcapaso definitivo
• Isoproterenol
• Todas
#La toxicidad de los anestésicos locales por lo general se debe:
• Uso de concentraciones altas de anestésicos
• Absorción rapida en un sitio vascularizado
• Inyección intravascular inadvertida
• Al uso de dosis excesivas
• Todas

Respuestas.txt

• Realizar un examen clínico completo
• Todas
• Acción de la bomba cardiaca y torácica durante las compresiones
• Isoproterenol
• Todas

Mi Archivo de salida fue:

#En la evaluación preoperatoria de un paciente ASA I de 30 años es indispensable:
• Solicitar un ECG de rutina
• Rx de tórax
nothing• Realizar un examen clínico completonothing
• Solicitar un coagulograma de rutina
nothing• Todasnothing
#La detención súbita y completa de circulación se expresa:
• Midriasis a los 60 seg.
• Por pCO2 en sangre arterial baja
• Por acumulo de acido láctico en los tejidos periféricos
• Respiración boqueante o apnea
nothing• Todasnothing
#El masaje cardiaco externo puede producir un cierto grado de flujo sistémico y pulmonar por:
nothing• Acción de la bomba cardiaca y torácica durante las compresionesnothing
• Diferencias de presión entre la aurícula y el ventrículo
• Diferencias de presión aortico pulmonares
• Mecanismo valvular aortico
• Ninguna
#Cual es la conducta terapéutica en UTI en el síndrome de Stokes Adams:
• Atropina
• Beta adrenergicos
• Inserción de marcapaso definitivo
nothing• Isoproterenolnothing
• Todas
#La toxicidad de los anestésicos locales por lo general se debe:
• Uso de concentraciones altas de anestésicos
• Absorción rapida en un sitio vascularizado
• Inyección intravascular inadvertida
• Al uso de dosis excesivas
• Todas

Archivo Final requerido:

#En la evaluación preoperatoria de un paciente ASA I de 30 años es indispensable:
• Solicitar un ECG de rutina
• Rx de tórax
nothing• Realizar un examen clínico completonothing
• Solicitar un coagulograma de rutina
• Todas
#La detención súbita y completa de circulación se expresa:
• Midriasis a los 60 seg.
• Por pCO2 en sangre arterial baja
• Por acumulo de acido láctico en los tejidos periféricos
• Respiración boqueante o apnea
nothing• Todasnothing
#El masaje cardiaco externo puede producir un cierto grado de flujo sistémico y pulmonar por:
nothing• Acción de la bomba cardiaca y torácica durante las compresionesnothing
• Diferencias de presión entre la aurícula y el ventrículo
• Diferencias de presión aortico pulmonares
• Mecanismo valvular aortico
• Ninguna
#Cual es la conducta terapéutica en UTI en el síndrome de Stokes Adams:
• Atropina
• Beta adrenergicos
• Inserción de marcapaso definitivo
nothing• Isoproterenolnothing
• Todas
#La toxicidad de los anestésicos locales por lo general se debe:
• Uso de concentraciones altas de anestésicos
• Absorción rapida en un sitio vascularizado
• Inyección intravascular inadvertida
• Al uso de dosis excesivas
nothing• Todasnothing

Mi idea es la siguiente:
Como ves todas las opciones comienzan con una Viñeta (•), las preguntas en cambio tienen el simbolo numeral (#). Entonces quisiera poder hacer q el batch busque la primera linea de Respuestas.txt en Preguntas.txt, desde la primera linea q comience con #, y marque la primera coincidencia, luego q busque la segunda linea de Respuestas.txt desde la 2° linea q comience con # en preguntas.txt, y luego la tercera y así sucesivamente. Gracias por toda la ayuda, disculpa las molestias, te estaré eternamente agradecido.

Saludos.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Eleкtro en 24 Septiembre 2013, 18:53
@MauriH

Lo que hace el código es:

por cada respuesta, procesa cada linea del archivo de preguntas y las va escribiendo a un archivo temporal (esto usando Batch se debe hacer así, linea por linea, es un lenguaje muy limitado)
si en el proceso encuentra una coincidencia (una y no más), es decir, si encuentra una linea de respuesta que sea exáctamente IGUAL que la linea de la pregunta, entonces le agrega el sufijo y prefijo a la linea de la pregunta, de lo contrario escribe la linea tal cual
al finalizar de procesar la respuesta, el archivo original se reemplaza por el archivo temporal para que el texto se actualice, y sigue con la siguiente respuesta, empezando a buscar desde la primera linea de preguntas.

si tenemos estos prefijos:
Código:
hola
adios

y un archivo respuestas con este contenido:
Código:
a
b
c

y un archivo de preguntas con este otro contenido:
Código:
a
a
a
b
b
b
c
c
c

Al ejecutar el code, este será el resultado:
Código:
holaaadios
a
a
holabadios
b
b
holacadios
c
c

Si no es eso lo que buscas, no lo he entendido bien,
Saludos!


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: MauriH en 24 Septiembre 2013, 19:29
@EleKtro H@cker

Entiendo lo q dices, hice una modificación de mi anterior comentario, una muy pequeña, leelo y dime q opinas, gracias de nuevo.

Saludos.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Eleкtro en 25 Septiembre 2013, 19:56
leelo y dime q opinas, gracias de nuevo.

Pues para ser sincero opino que aunque estemos en un hilo de Batch, cualquier otro lenguaje es más viable para hacer esa tarea que Batch, así que en caso de hacerlo, lo haré en otro lenguaje.

EDITO: Ya tengo la solución, pero lo hice en VB.NET así que te mando un privado para no desvirtuar el tema Batch.

. Lo que hice básicamente fue :

1. Delimitar el texto de las preguntas (splitear) usando como caracter el caracter inicial de cada pregunta (#) y agregar los "bloques" a un Array, y así cada item del Array debería contener el título de la pregunta y las 5 respuestas (o las que sean) de dicha pregunta.

2. Realizar el mismo procedimiento con el archivo de respuestas, y asi, en cada item del Array debería haber una sola respuesta.

3. Luego símplemente hay que procesar el Array de respuestas de inicio a fín para hacer un reemplazamiento de string en el mismo índice de Item del Array de preguntas, ya que es óbvio que no va a haber dos respuestas iguales en la misma pregunta.

Saludos!


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: gustavo2713 en 8 Octubre 2013, 20:31
Hola Leo: tengo un txt

 000659   05203996601   6600011           1   001   010813   
 050960   61083359502   6611801           1   001   010813   
 050960   61083359502   6600011           1   001   010813   
 050005   61630799201   6604131           1   001   020813   
 050005   61630799201   6608651           1   001   020813   

y necesito filtrar y separar por los número de la primera columana, de manera de obtener:
 000659   05203996601   6600011           1   001   010813 ---> txt 1

 050960   61083359502   6611801           1   001   010813 ---> txt 2 
 050960   61083359502   6600011           1   001   010813

 050005   61630799201   6604131           1   001   020813 ---> txt 3
 050005   61630799201   6608651           1   001   020813






Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: MauriH en 13 Octubre 2013, 01:24
Ayuda, tengo una consulta, por favor,

Como podría hacer con un batch reemplazar una palabra por una secuencia de números, por ejemplo si quiero reemplazar la palabra "amigo":

Texto de entrada:

texto texto texto amigo texto y más texto
texto amigo texto y más textoamigo
amigotexto y más texto.

Salida:

texto texto texto 0001 texto y más texto
texto 0002 texto y más texto0003
0004texto y más texto.

Gracias,
Saludos.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Eleкtro en 13 Octubre 2013, 03:03
Si sólamente se trata de modificar UNA palabra, entonces lo más sencillo es partir el string en un array y hacer un reemplazamiento de string con las cadenas que coincidan, cada uno de los items del array sólamente contendrá una palabra.

Si se quiere modificar más de una palabra entonces yo usaría expresiones regulares.

Recordemos que para hacer la secuencia numérica hay que manipular una variable de tipo String donde deberiamos agregarle "X" cantidad de ceros a la izquierda (Ej: "0001").

Esto es facil de hacer, pero no recomiendo llevar esto a cabo usando Batch, aunque cualquier usuario es libre de proporcionarte una solución,
a ver si el compañero moderador Leo se anima.

Saludos!


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: fido28 en 15 Octubre 2013, 23:31
Hola:

Me gustaria saber si me pueden ayudar necesito crear un archivo BAT que se ejecute un programa determinado por decir el excel pero que al iniciar se inicie como otro usuario y que ademas este oculto para que los usuarios no vean el login del BAT.

He investigado un poco creando el BAT y despues se puede pasar a un EXE para que no se visualice pero no logro hacerlo funcionar.

Código:
-u usuario -p password "%ProgramFiles%\Microsoft Office\Office14\EXCEL"

Ojala se pueda me encantaria saber GRACIAS de antemano.



Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Eleкtro en 16 Octubre 2013, 07:16
@fido28

La temática de este hilo trata sobre maniuplación de archivos de texto,
para el resto de dudas, formula un nuevo post.

1. Lo más parecido a técnicas de Impersonation en Batch, es usando el comando RunAs.
En consola:

Código:
RunAs /?

2. Puedes convertir un script bat a EXE con ExeScript Editor.

Saludos


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: eternus1492 en 21 Octubre 2013, 10:26
Hola que tal, me gustaría saber si me podeis echar una mano para crear un archivo .bat que realice lo siguiente:

Tengo por un lado un fichero maquinas.txt con este contenido:

Código:
amon,osiris,tutatis,heman,skeletor

y por otro lado tengo un fichero config.txt con este contenido:

Código:
** Configuración General del Cliente **

NODENAME        vc1_dc2_dm1
*TCPSERVERADDRESS  10.0.84.21
passwordaccess generate
enablelanfree           yes
*LANFREECommmethod TCPIP
*LANFREETCPport   1502
LANFREETCPServeraddress 10.0.84.23



** Planificadores y Logs **

schedmode       prompted
schedlogname    c:\tivoli\tsm\baclient\logs\dsmsched_dc2_dm1.log
errorlogname    c:\tivoli\tsm\baclient\logs\dsmerror_dc2_dm1.log
schedlogretention       7
errorlogretention       7


** TSM4VE Parámetros **

VMCHOST   esxvcpsp.bankinter.bk
VMCuser TSM
VMMC DEFECTO
VMCTLMC DEFECTO
VMBACKUPTYPE    FULLVM
VMFULLTYPE VSTOR
VMVSTORTRANSPORT        san:nbd

VMPROCESSVMWITHPRDM     yes
VMPROCESSVMWITHINDEPENDENT      yes
VMENABLETEMPLATEBACKUPS yes
VMBACKDIR c:\tivoli\tsm\baclient\mnt
VMMAXPARALLEL 5
VMLIMITPERHOST 3
VMLIMITPERDATASTORE 3
HTTPPORT 1585


** Parámetros Optimización Protectier **

resourceutilization 8
TXNBYTELIMIT 2097152



** Máquinas en Backup **

DOMAIN.VMFULL vm=vm1,vm2,vm3;-vm=rma*,apo*,vdi*,febe*,elias*,jenk*,parsp*,waslin*,propo*,win7*,boco*,webser*,axg*,one*,read*,maja*,ntin*,pgue*,ext*"


MANAGEDSERVICES WEBCLIENT


Lo que necesitaria es hacer un bat que coja la lista de máquinas del primer fichero:

Código:
amon,osiris,tutatis,heman,skeletor

y la ponga en la parte

Código:
vm=vm1,vm2,vm3;

del segundo fichero, para que quede de esta forma

Código:
vm=amon,osiris,tutatis,heman,skeletor;



Un saludo cordial.



[MOD]: Utiliza el botón de insertar código para insertar código o contenido de texto


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: vicox19 en 10 Diciembre 2013, 17:02
tengo el siguiente caso.
todos los dias tengo que instalar un programa en mi empresa y necesito cambiar el numero de la version en 10 archivos de textos diferentes.
por ejemplo:

version de ayer: 1.1.20
version de hoy: 1.1.21
el instalador se encuentra hubicado digamos en C:\instaladores
hoy quiero instalar la version actual y para eso tengo que abrir 10 diferentes archivos de texto hubicados en el mismo folder. Dentro el archivo hay un parametro VERSION ACTUAL: 1.1.20  (que es la version de ayer)

quisiera saber con un archivo BATCH puedo hacer que me pase lo siguiente al ejecutar el BATCH:

cual es la version actual?:
1.1.21
abrir archivo1.txt reemplazar 1.1.20 por 1.1.21
abrir archivo2.txt reemplazar 1.1.20 por 1.1.21
abrir archivo3.txt reemplazar 1.1.20 por 1.1.21
.....
abrir archivo10.txt reemplazar 1.1.20 por 1.1.21


es posible???


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 10 Diciembre 2013, 17:38
@vicox19

Claro, solo se necesita lo siguiente:

  • Un ejemplo claro del archivo de entrada (el archivo donde quieres que se reemplace, se necesita para saber qué podemos modificar y que no).
  • El o los nombres de los archivos donde quieres que se realice el reemplazo.
  • Que especifiques claramente qué es lo que quieres que se reemplace.
  • Finalmente, un archivo de salida de ejemplo, es decir, el cómo quisieras que quedara.

Se necesita que especifiques eso claramente para empezar a trabajar. Sé que quizás ya lo has hecho anteriorente, pero no encuentro claro tu mensaje, así que por favor corrigelo.

Saludos.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: vicox19 en 10 Diciembre 2013, 17:57
ok, tratare de ser mas especifico.
archivo que quiero que se modifique:
city1.txt
contenido:
.....codigo......
##Other Properties
#
zipFileSourcePath=\\server1\BuildArchive\1.01\build_1.01.20.zip
.....codigo......

como este archivo tengo de 10 ciudades diferentes. city2, city3....city10

lo que quiero es que al correr el batch me pregunte:
CUAL ES LA VERSION DEL NUEVO BUILD DE HOY?:

yo inserte: 1.01.21

ese NUEVO numero tiene que ser reemplazado en los 10 archivos SOLO la parte del numero. osea, lo que espero que es que el city1.txt termine asi:
.....codigo......
##Other Properties
#
zipFileSourcePath=\\server1\BuildArchive\1.01\build_1.01.21.zip
.....codigo......

y haga lo mismo en los otros 10 archivos city2.txt, city3.txt.....city10.txt


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 10 Diciembre 2013, 18:44
Bien, hice esto rápido.

Hice una carpeta con los siguientes archivos:

Código:
archivo1.txt
archivo10.txt
archivo2.txt
archivo3.txt
archivo4.txt
archivo5.txt
archivo6.txt
archivo7.txt
archivo8.txt
archivo9.txt

El interior del archivo de cada uno es el siguiente:

archivo1.txt:

Código:
.....codigo......    
##Other Properties    
#    
zipFileSourcePath=\\server1\BuildArchive\1.01\build_563456.zip
.....codigo......    

Y así para todos.

El código del batch es el siguiente:

Código:
@echo off

setlocal enabledelayedexpansion

rem Cambiar lo siguiente por la ruta de tus archivos
rem Por ejemplo: c:\instaladores
set "instaladores_path=.\instaladores"

:prompt
set /p "build_version=Cual es la versión del build actual? "
if "!build_version!"=="" (goto:prompt)

for /f "tokens=*" %%_ in ('dir /b "!instaladores_path!\*.txt"') do (
    for /f "tokens=*" %%s in ('type "!instaladores_path!\%%_"') do (
        echo %%s | find "zipFileSourcePath" > nul 2>&1 && (
            for /f "tokens=1,2 delims=_" %%# in ('echo %%s') do (
                echo %%#_!build_version!.zip >> "!instaladores_path!\temp_%%_"
            )
        ) || (
            echo %%s >> "!instaladores_path!\temp_%%_"
        )
    )
    copy /y "!instaladores_path!\temp_%%_" "!instaladores_path!\%%_"
    del "!instaladores_path!\temp_%%_"
)

Esta es una corrida y lo que realiza sobre un archivo:


Código:
C:\Users\Leo\Desktop\Baúl\Batch>code.cmd
Cual es la versi├│n del build actual? 1.2.3.4.56
        1 archivo(s) copiado(s).
        1 archivo(s) copiado(s).
        1 archivo(s) copiado(s).
        1 archivo(s) copiado(s).
        1 archivo(s) copiado(s).
        1 archivo(s) copiado(s).
        1 archivo(s) copiado(s).
        1 archivo(s) copiado(s).
        1 archivo(s) copiado(s).
        1 archivo(s) copiado(s).

C:\Users\Leo\Desktop\Baúl\Batch>

Salida de los archivos:
Código:

C:\Users\Leo\Desktop\Baúl\Batch>type instaladores\archivo1.txt instaladores\archivo2.txt

instaladores\archivo1.txt


.....codigo......
##Other Properties
#
zipFileSourcePath=\\server1\BuildArchive\1.01\build_1.2.3.4.56.zip
.....codigo......

instaladores\archivo2.txt

.....codigo......
##Other Properties
#
zipFileSourcePath=\\server1\BuildArchive\1.01\build_1.2.3.4.56.zip
.....codigo......

C:\Users\Leo\Desktop\Baúl\Batch>

Antes de probarlo realiza un respaldo de los archivos donde vas a hacer el reemplazo. Usalo bajo tu propio riesgo.

Advertencia:

El código batch se basa en la línea que comienza:
Código:
zipFileSourcePath=\\server1\BuildArchive\1.01\build_1.2.3.4.56.zip
Para que el código funcione correctamente en la línea anteriormente solo debe de haber un caracter '_', que es el separa zipFileSource... de build_, si hay una más el código quizás no funcione.

Así que procura que solo haya el que está enseguida de build_.

Saludos.  >:D


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: vicox19 en 10 Diciembre 2013, 19:54
 :xD yeah!!!
si funciona!! eres un genio.
si hace el cambio en el numero de version, pero me sale un error de comando SWIFT y tuve que cambiar la variable que definiste por que no reconocia:
de: set "instaladores_path=.\instaladores"
a:   set "instaladores_path=C:\instaladores"

pero a pesar del error si hace el cambio de version. quizas se deba a mi version de windows? win7 o nose... corrida:

C:\instaladores>test.bat

Cual es la versi≤n del build actual? 10.00.00.1188

'Swift' is not recognized as an internal or external command,
operable program or batch file.
        1 file(s) copied.
'Swift' is not recognized as an internal or external command,
operable program or batch file.
        1 file(s) copied.
'Swift' is not recognized as an internal or external command,
operable program or batch file.
        1 file(s) copied.
'Swift' is not recognized as an internal or external command,
operable program or batch file.
        1 file(s) copied.
'Swift' is not recognized as an internal or external command,
operable program or batch file.
        1 file(s) copied.

y si no es mucha molestia. supongo que sobre el mismo codigo se puede modificar algo para lograr lo siguiente.

una vez que actualizo las versiones y lanzo los instaladores UNO POR UNO, a veces falla el instalador. cuando falla tengo que abrir el mismo archivo y cambiar un setting:
de: failOnSQLError=true
a:  failOnSQLError=false

y volver a lanzar para que esta vez A PESAR DEL ERROR instale el programa.
Basicamente lo mismo del anterior caso solo que es en otra parte dentro el archivo donde se hace el cambio a FALSE.

MIL GRACIAS DE ANTEMANO!
me ayudaste a optimizar de gran manera mi trabajo, por que si me olvidaba cambiar la version de un archivo y lanzaba el instalador con un build anterior, era todo un problema jeje, y esto es TODOS LOS DIAS  :P


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 10 Diciembre 2013, 20:06
Coloca por favor el batch que utilizaste con las últimas modificaciones, para ver si localizo el error.

Saludos.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: vicox19 en 10 Diciembre 2013, 20:14
Código:
@echo off

setlocal enabledelayedexpansion

rem Cambiar lo siguiente por la ruta de tus archivos
rem Por ejemplo: c:\instaladores
set "instaladores_path=C:\instaladores"

:prompt
set /p "build_version=Cual es la versión del build actual? "
if "!build_version!"=="" (goto:prompt)

for /f "tokens=*" %%_ in ('dir /b "!instaladores_path!\*.txt"') do (
    for /f "tokens=*" %%s in ('type "!instaladores_path!\%%_"') do (
        echo %%s | find "zipFileSourcePath" > nul 2>&1 && (
            for /f "tokens=1,2 delims=_" %%# in ('echo %%s') do (
                echo %%#_!build_version!.zip >> "!instaladores_path!\temp_%%_"
            )
        ) || (
            echo %%s >> "!instaladores_path!\temp_%%_"
        )
    )
    copy /y "!instaladores_path!\temp_%%_" "!instaladores_path!\%%_"
    del "!instaladores_path!\temp_%%_"
)


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: leogtz en 10 Diciembre 2013, 20:41
@vicox19

¿Cómo lanzas un instalador? Deja por favor un ejemplo.

Citar
una vez que actualizo las versiones y lanzo los instaladores UNO POR UNO, a veces falla el instalador. cuando falla tengo que abrir el mismo archivo y cambiar un setting:
de: failOnSQLError=true
a:  failOnSQLError=false

¿Con abrir el mismo archivo te refieres al archivo al cuál se le ha modificado la versión?

Saludos.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: vicox19 en 10 Diciembre 2013, 21:04
este es el proceso completo:
en mi folder instaladores tengo:
archivo1.txt
archivo1.bat
archivo10.txt
archivo10.bat
archivo2.txt
archivo2.bat
.....(1 bat para cada TXT)

los archivos .bat basicamente lo que hacen es ejecutar el instalador indicando que lea la configuracion definida en archivo.txt correspondiente. Obviamente el archivo de configuracion tiene muchas cosas, pero a mi solo me interesa trabajar en los 2 campos que te explico abajo.

entonces, como cada dia sale un nuevo bulid, tengo que abrir el archivo de config del instalador y cambiar a la version del nuevo build.

.....codigo......
##General Properties
failOnSQLError=true
.....codigo......     
##Other Properties     
#     
zipFileSourcePath=\\server1\BuildArchive\1.01\build_563456.zip
.....codigo......

con el primer codigo que hiciste TODO OK, el numero de version cambia.

en caso de que la instalacion falle, tengo que volver a abrir el archivo de configuracion y cambiar un valor a FALSE, ya no la version, solo cambiar el FailOnSqlError a FALSE (por eos quisiera que sea un archivo aparte por que NO siempre falla el build.)

.....codigo......
##General Properties
failOnSQLError=FALSE
.....codigo......     
##Other Properties     
#     
zipFileSourcePath=\\server1\BuildArchive\1.01\build_563456.zip
.....codigo......

una vez que esta en FALSE tengo que volver a lanzar el instalador pero esta vez NO fallara por que el FALSE que pusimos. Una vez que termine el proceso de instalacion, tengo que volver a poner a TRUE el setting para repetir al dia siguiente el proceso. Esta ultima parte de poner de FALSE a TRUE simplemente seria editar el batch que sirva para cambiar de TRUE a FALSE.

en resumen, necesitaria 3 batch:
1. para cambiar la version (OK)
2. para cambiar de failOnSQLError=TRUE a failOnSQLError=FALSE
3. para cambiar de failOnSQLError=FALSE a failOnSQLError=TRUE (similar al 2 invirtiendo las opciones)


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: sabeeee en 11 Marzo 2014, 20:49
Esto es la biblia.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Rikosky en 15 Marzo 2014, 15:13
Como se podria insertar una linea de texto al principio de un .txt?

Código:
echo %text23%>>Accesos.txt

Lo mismo que se haria con ese codigo, pero insertando la linea al principio y no al final, de forma que lo mas reciente este arriba y no al final del texto.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Eleкtro en 18 Marzo 2014, 03:40
Como se podria insertar una linea de texto al principio de un .txt?

Código:
echo %text23%>>Accesos.txt

Lo mismo que se haria con ese codigo, pero insertando la linea al principio y no al final, de forma que lo mas reciente este arriba y no al final del texto.

Hola, puedes hacerlo de la siguiente manera:

Código
  1. @Echo OFF & Title Append Text - By Elektro
  2.  
  3.  
  4. :::::::::::::::
  5. REM Testing
  6. (
  7. Echo Line 1
  8. Echo Line 2
  9. Echo Line 3
  10. )>"C:\File.txt"
  11. :::::::::::::::
  12.  
  13.  
  14. Call :AppendTextToBottom  "C:\File.txt" "Bottom Text Here"
  15. Call :AppendTextToTop     "C:\File.txt" "Top Text Here"
  16.  
  17. Pause&Exit
  18.  
  19. :: Syntax:
  20. :: AppendTextToTop "File" "Text"
  21. :AppendTextToTop
  22. Type "%~1" > "%TEMP%\%~n1.tmp"
  23. (Echo %~2) > "%~1"
  24. (For /F "Useback Delims=" %%# In ("%TEMP%\%~n1.tmp") Do (Echo %%#)) >> "%~1"
  25. (Del /Q "%TEMP%\%~n1.tmp" 2>NUL) & Goto :EOF
  26.  
  27. :: Syntax:
  28. :: AppendTextToBottom "File" "Text"
  29. :AppendTextToBottom
  30. ((Echo %~2) >> "%~1") & Goto :EOF

Saludos


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: hostbob en 21 Abril 2014, 09:33
i have been trying to make this to work for a while, but with how you just did it i think i can now understand some few points from your post.

Nice share


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: xxIv4nxx en 24 Abril 2014, 22:50
hola buenas! Disculpa creo que aqui me estoy ahogando lentamente en un vaso de agua... Quiero crear un archivo de texto que tenga las siguientes letras, que quiero sean modificadas desde ese mismo y otra aplicacion al mismo tiempo.. para que cada vez que pregunte alguno de los dos programas tener el valor en tiempo real (habia intentado esto con variables de entorno, registros de windows.. pero creo q es mas facil así). Entonces, el problema esta en que quiero borrar una letra que entra el usuario coloque, aqui lo estoy tratando de hacer con una variable auxiliar y luego devolver el resultado al txt nuevamente, pero no encuentro como :S

Código:
> ARCHIVO.txt ECHO A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
SET AUX=''
FOR /F "TOKENS=*" %%# IN ('TYPE DRIVES.TXT') DO (SET "AUX=%%#")
ECHO %AUX%

SET /P A=
ECHO %A%

SET "AUX=!AUX: %A% = 5!"

> ARCHIVO.txt ECHO %AUX%
PAUSE

De antemano, Gracias!


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Demente117 en 12 Mayo 2014, 03:40
Código:
@echo off
setlocal enabledelayedexpansion
for /f "tokens=* delims=" %%x in ('type texto.txt') do (
set linea=%%x
set linea=!linea:Perl=C!
call :show !linea!
)
goto:eof
:show
echo %* >> out.txt
goto:eof


Mi pregunta:
¿con este bat se puede modificar el caracter "????
aqui esta Perl cambiandose por C, como seria por el simbolo-caracter de las "(comillas)????

Os parecera tonteria pero no consigo cambiarlas, funciona todo lo que le puse menos caracteres especiales como las ".
Si este codigo no puede utilizarse, me pondrian uno sencillo, lo poco que se de bat es gracias a tutoriales-ejemplos tipo este foro.

a ver si alguien me podria ayudar???



Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: willdoxero en 15 Mayo 2014, 01:36
Hola a todos, aquí una duda:

Estoy usando EDLIN para modificar una línea en un archivo .bat
pero al abrir el nuevo archivo me deja un espacio en blanco al final de la línea que se editó.
Cómo puedo evitar el espacio en blanco al final de la línea?
Código
  1.  
  2. echo Indicar nombre de ruta.
  3. echo.
  4. set /p "cabecera=Destino: "
  5. ::suponiendo ruta= 127.0.0.1
  6. echo.
  7. (
  8. echo 13
  9. echo set ruta=%cabecera%
  10. echo e
  11. ) | edlin /b c:\scripts\archivo.bat
  12.  
  13.  

Al abrir archivo queda un espacio en blanco (al final del .1), ejemplo:

set ruta=127.0.0.1

El problema es que la variable la asocio con otra y al querer entrar a la ruta completa no la identifica por el espacio en blanco.
ejemplo: \\127.0.0.1 (espacio)\mi_carpeta

alguna sugerencia? :rolleyes:
Gracias!!


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: xhunik en 25 Septiembre 2014, 20:44
es un buen post ciertamente  :) :) :) :) :) pero yo necesito todas esas funciones para GNU/LINUX es decir para un script en /bin/bash porque en windows si lo se (gracias a elektro) pero en linux no, yo quisiera saber si hay algun post con esto solo que para el bash. Les agradeceria mucho que me ayudaran  :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes:


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Eleкtro en 25 Septiembre 2014, 22:09
es un buen post ciertamente  :) :) :) :) :) pero yo necesito todas esas funciones para GNU/LINUX es decir para un script en /bin/bash porque en windows si lo se (gracias a elektro) pero en linux no, yo quisiera saber si hay algun post con esto solo que para el bash. Les agradeceria mucho que me ayudaran  :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes:

puff... pues va a estar complicado en el foro encontrar un hilo de estas características para Bash, pero siempre puedes recurrir a la ayuda de San-Google :):


Advanced Bash-Scripting Guide:
Prev   Chapter 10. Manipulating Variables
(http://tldp.org/LDP/abs/html/string-manipulation.html)


Bash String Manipulation Examples
Length, Substring, Find and Replace
(http://www.thegeekstuff.com/2010/07/bash-string-manipulation/)


16.4. Text Processing Commands
Commands affecting text and text files
(http://www.tldp.org/LDP/abs/html/textproc.html)

Saludos!


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: d(-_-)b en 1 Noviembre 2014, 19:55
puff... pues va a estar complicado en el foro encontrar un hilo de estas características para Bash, pero siempre puedes recurrir a la ayuda de San-Google :):


Advanced Bash-Scripting Guide:
Prev   Chapter 10. Manipulating Variables
(http://tldp.org/LDP/abs/html/string-manipulation.html)


Bash String Manipulation Examples
Length, Substring, Find and Replace
(http://www.thegeekstuff.com/2010/07/bash-string-manipulation/)


16.4. Text Processing Commands
Commands affecting text and text files
(http://www.tldp.org/LDP/abs/html/textproc.html)

Saludos!

Esta bueno todo el contenido, por si interesa, aqui esta todo el material en CHM.

Advanced Bash-Scripting Guide
http://chm.kollm.org/abs-guide-5.0.chm

Un saludo.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: k0rsak0v en 10 Noviembre 2014, 14:55
Buenos días camaradas, estoy buscando ayuda para un proceso que necesito, tengo un acceso directo (.LNK) con una ruta o destino dentro de este ("C:\Program Files (x86)\Microsoft Office\AccessRT2007\MsAccess.exe" "C:\Program Files (x86)\World Office\\\WO10\WProg.afs" /runtime /wrkgrp "C:\Program Files (x86)\World Office\\\WO10\WGroup.afw" /user "cliente" /pwd "") necesito el código para almacenar la ruta donde esta el archivo Wgroup.afw, o el código para buscar en donde esta instalado el archivo, ya que necesito hacer un proceso de remplazo de estos archivos, el problema es que en los equipos están instalados algunas veces sobre las raíces de otros discos, casi siempre en ubicaciones distintas, es de extrema urgencia su ayuda


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: ServH en 10 Marzo 2015, 12:24
Hola buenos días.

Quería comentaros un problema que estoy teniendo a la hora de crear un .bat

Lo que necesito hacer creo que es sencillo, pero estoy fallando en la sintaxis del código.

Lo que tiene que hacer es renombrar los archivos de una carpeta, con la cadena de texto de un fichero de log.

Este es el log

filename   name   email   comment   twitter   phone
2015_03_06_103545 dario   
2015_03_06_173540 emilio   
2015_03_09_132819 maria   

En situación tendríamos un archivo .jpg que se llama 2015_03_06_103545.jpg y la intención del programa es que lo cambie por dario.jpg

El bat tendría que hacer un recorrido por toda la carpeta y cambiar todos los jpg por su nombre.

Un saludo y gracias.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Eleкtro en 10 Marzo 2015, 14:07
@ServH

Muestra el código que llevas hecho por ti mismo, aquí no se hacen tareas.

Te muestro un ejemplo para iterar el log y asignar el "nombre" a la variable de FOR:

Código
  1. For /F "UseBackQ Tokens=1,* Delims= " %%a In ("Archivo.log") Do (Echo %%~b)

Luego, solo tendrías que renombrar los archivos utilizando dicha variable para asignar el nuevo nombre del archivo jpeg.

Saludos


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: ServH en 10 Marzo 2015, 14:28
Hola Elektro.

Pues no tengo nada más que el pseudocódigo ya que voy probando módulos para que me hagan pequeñas funciones. (Estoy empezando con este lenguaje)

Ahora te pondré una muestra.

Lectura del archivo.

filename   name   email   comment   twitter   phone
PHOTO_1   maria            
PHOTO_6   paco         
PHOTO_7   juan            
         
En un primer lugar lo que quiero que haga el bat es leer este .txt y guardar en una variable el nombre del fichero var1=PHOTO1 y otra variable con el nombre var=maria
Pero estas variables quiero que guarden relación (No se como explicarlo).

Después el .bat hará una lectura de los archivos y cuando encuentre PHOTO1 que es = a var1 lo cambie por var2.

Se podría antes de ejecutar nada hacer un tratamiento del log quedando así.
PHOTO_1   maria            
PHOTO_6   paco         
PHOTO_7   juan

P:D No pido el código hecho, solo quiero entender que tengo que hacer y solucionar las cosas en las que estoy fallando.

Un saludo. y gracias.         


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Eleкtro en 10 Marzo 2015, 18:02
P:D No pido el código hecho, solo quiero entender que tengo que hacer y solucionar las cosas en las que estoy fallando.

Ok, pues te explico, el log consiste en dos "argumentos" (o Tokens), el primero sería el nombre de la imagen (PHOTO_1), y el segundo sería el nombre de la persona (María), pues, solo tienes que modificar el parámetro "Tokens" de un For /F (cómo el que te mostré antes), para que tome esos dos argumentos por separado, usando cómo deliminator de argumento el caracter "espacio", de esa forma almacenarás en la variable %%a el nombre de la imagen, y en la variable %%b el nombre de la persona, obteniendo esa "relación" que quieres.

Lo que acabo de comentar ya lo hace el For que mostré arriba, pero si quieres entenderlo mejor, lee aquí:
For /f - Loop through text | Windows CMD | SS64.com (http://ss64.com/nt/for_f.html)

Saludos


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: ServH en 11 Marzo 2015, 09:26
Hola Elektro.

Primero que nada agradecerte la ayuda desinteresada, me ha sido de utilidad entender mejor que es lo que necesita el programa.

Y en segundo lugar, y observando que tienes experiencia en este lenguaje, ¿Crees que es la manera más optima de realizar esto?

Muchas gracias por el tutorial.

Un saludo.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Eleкtro en 11 Marzo 2015, 10:05
¿Crees que es la manera más optima de realizar esto?

No, Batch es una herramienta limitada, está diseñada y orientada a la automatización de tareas simples, los resultados y la eficiencia de cualquier otro lenguaje siempre será más óptimo que Batch, sin excepción alguna.

Sobre el problema que tienes, en parte ese texto que has mostrado se podría considerar un archivo CSV delimitado por espacios, y digo en parte, porque no se si alguno de los campos de esa tabla contiene un "espacio" (ej: 'María del monte'), entonces el algoritmo que uses para delimitar los campos basándose en ese "espacio" delimitador no servirá, y será mucho más complejo, porque si la cantidad de espacios es desconocida... no se cómo vas a reconocer un nombre a menos que utilices una base de datos de nombres, jaja.

Por otro lado, la tarea no requiere más que la utilización de un lenguaje simple cómo es Batch (suponiendo que no haya más espacios adicionales), pero óptimo no es que sea.

En fin, no me enrollo más, lee esta respuesta para hallar una solución mucho más eficiente que Batch:
http://foro.elhacker.net/programacion_general/programa_de_busqueda_con_archivo_csv-t431563.0.html;msg2001628#msg2001628

PD: Ese mismo Snippet que desarrollé en VB.Net te debería servir, pero cambiando el delimitador por un espacio o tabulación o lo que uses, claro está.

PD2: Cómo explico en ese comentario, cualquier otro lenguaje sirve, cómo Python, Ruby, C/C++, Java, etc, la resolución del problema es practicamente la misma en cualquier lenguaje, que consiste en generar un búcle que lea linea por linea, solo que unos lenguajes te lo ponen más fácil que otros, y a partir de ahí la elaboración del algoritmo para hacerlo menos o más sofisticado es cosa tuya.

Saludos!


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: ServH en 11 Marzo 2015, 10:38
Buenísima la respuesta.

Pero estoy un poco "atado" por la gente de "arriba" jaja, voy a intentar convencerlos de que este sistema no es óptimo por que ahora mismo te iba a escribir por el mismo problema.

¿Que pasa si tiene un nombre compuesto?, ya está el lío montado, no me sirve.

En resumen, y por si tienes una idea mejor que la mía, la situación que se me ha planteado es esta.

Tenemos un software que toma una fotografía, pero las opciones de este programa solo nos permite guardarlas con un nombre y un sufijo EJ: PHOTO_1

Después al usuario le pide un nombre, que este se guarda para usarlo en el campo EMAIL (Algo que no entiendo, por que lo ha desarrollado así)

Y la necesidad era simplificar el proceso de renombrar las fotos, para no tener a una persona aburrida haciendo esto y que fuera con un único clic haciendo uso del log.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Eleкtro en 11 Marzo 2015, 11:43
@ServH

Si los campos de esa tabla están separados usando "tabulación", entonces lo tienes fácil y puedes utilizar el ejemplo que mostré.
 
En cambio, si se usa un espacio para separar los campos, y si además hay nombres compuestos cómo has comentado, entonces no hay nada que sea viable, porque realmente necesitarías gestionar una base de datos de nombres para tomarla como referencia a la hora de delimitar correctamente los campos y así poder aumentar la probabilidad de éxito (no sería 100% fiable).

Lo único que se me ocurre, en caso de que los campos esten separados por espacios y no por tabulaciones, es que le pidas al autor de la aplicación que modifique el código para usar un caracter delimitable (por ejemplo un punto y coma ";"), por que el diseño actual sería incorrecto e improductivo.

PD: Y si la aplicación es un ensamblado .Net y no puedes recurrir a la ayuda del autor, entonces siempre puedes recurrir a la mágia de la ingenieria inversa (en este caso utilizando técnicas mediante Reflection) para localizar y modificar el caracter que está usando el programa para separar las celdas.

Saludos.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: ServH en 11 Marzo 2015, 11:52
@Eleкtro

Pues intenté hablar con el desarrollador, y le pedí que incluyera un módulo para que el campo que el usuario rellena como "nombre" que luego acaba siendo el asunto del correo si eliges la opción de enviar la imagen lo cambiara, pero ni caso.

Se me estaban ocurriendo un par de cosas con java, y tener un .jar sencillo que me haga la misma función, además de que tengo más libertad para programar en este lenguaje.

Seguramente, abra otro hilo, para no ensuciar este, y pediré algún que otro consejo ya que estoy oxidado.

Muchas gracias @Eleкtro por la ayuda prestada hasta el momento.
Un saludo.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: light310oct en 29 Marzo 2015, 23:04
Yo tengo una duda sobre algo que he intentado hacer con VB6.0 y nada mas no he podido sera que lo podre hacer con un batch?, la idea es agregar datos entre la ultima etiqueta    "</tr>"y la etiqueta "</table>"a fin de ir armandome una tabla con datos de una variable
Código
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  2.    <head>
  3.  
  4.        <title>Tabla de registro</title>
  5.    </head>
  6.    <body>
  7.  
  8.              <td>Celda 1</td>
  9.              <td>Celda 2</td>
  10.              <td>Celda 3</td>
  11.          </tr>
  12.          <tr>
  13.              <td>Celda 4</td>
  14.              <td>Celda 5</td>
  15.              <td>Celda 6</td>
  16.          </tr>
  17.        </table>
  18.    </body>
  19. </html>


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Eleкtro en 30 Marzo 2015, 10:14
Yo tengo una duda sobre algo que he intentado hacer con VB6.0 y nada mas no he podido sera que lo podre hacer con un batch?, la idea es agregar datos entre la ultima etiqueta    "</tr>"y la etiqueta "</table>"a fin de ir armandome una tabla con datos de una variable

Si, es posible hacerlo, pero la forma de llevar a cabo esa tarea en un lenguaje simple cómo Batch resultaría en un código bastante tedioso e ineficiente, Batch no puede manipular documentos Html, y además, ya que estás utilizando un lenguaje más apto no deberías rebajar el nivel a una herramienta simplona cómo Batch, no hay necesidad ni justificación para hacer eso,
lo mejor es que intentes seguir haciéndolo en un lenguaje capacitado, yo personalmente te recomiendo VB.Net/C#, aunque de todas formas en VB6 puedes utilizar expresiones regulares para hacerlo de una manera menos efectiva.

Saludos


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: javiert239 en 20 Junio 2015, 20:57
Yo tengo una consulta.
Tengo dos archivos, archivo1.txt y archivo2.txt.
El arhivo1 contiene lo siguiente:
Citar
Primera linea

Tercera linea

Quinta linea
El archivo2 contiene lo siguiente:
Citar

Segunda linea

Cuarta linea

Existe alguna forma de fucionar esos archivos de forma que las lineas queden en sus lugares correspondietes? Parecia algo bastante sencillo, pero el otro dia le di un millon de vueltas y no encotre ninguna forma.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Eleкtro en 21 Junio 2015, 00:31
Existe alguna forma de fucionar esos archivos de forma que las lineas queden en sus lugares correspondietes? Parecia algo bastante sencillo, pero el otro dia le di un millon de vueltas y no encotre ninguna forma.

En Batch sería algo MUY, MUY tedioso (e ineficiente) ya que no tiene soporte para Arrays; En cualquier otro lenguaje de verdad, sería algo muy sencillo.

Una manera general de llevar a cabo esa tarea sería iterar con un búcle las lineas de texto del primer archivo para añadir esas lineas a un Array, una vez hecho esto, ya tienes una colección indizada en la que poder comprobar si un elemento está vacío o no, para reemplazarlo/fusionarlo por el elemento con el mismo índice al iterar las lineas del segundo archivo.

Pseudo-Código:

Código:
declare linesCol(Array) = Null
declare mixedLinesCol(Array) = Null
declare index(Int32) = 0

For Each line(String) in textfile1.ReadToEnd:
    linesCol1(Index) = line
    Index += 1
End For

Index = 0 # Resetear el contador.
For each line(String) in textfile2.ReadToEnd:

    # Si la linea no está vacía, reemplazar por la linea original (o añadirla).
    if line.IsNotEmpty() Then
        linesCol1(Index) = line
    End If

    Index += 1
End For



Se que no es Batch, pero desarrollarlo en Batch sería perder el tiempo por que hay muchas mejores opciones, prefiero aportarte una alternativa mejor, mostrándote este código funcional (y eficiente) desarrollado en VB.NET:
Código
  1. Dim textLineCol1 As IEnumerable(Of String) =
  2.    File.ReadAllLines("Archivo 1.txt", Encoding.Default)
  3.  
  4. Dim textLineCol2 As IEnumerable(Of String) =
  5.    File.ReadAllLines("Archivo 2.txt", Encoding.Default)
  6.  
  7. Dim mixedLineCol As New List(Of String)
  8.  
  9. For index As Integer = 0 To (textLineCol2.Count - 1)
  10.  
  11.    Dim curLine As String = textLineCol2(index)
  12.  
  13.    If (textLineCol1.Count <= index) OrElse (Not String.IsNullOrWhiteSpace(curLine)) Then
  14.        mixedLineCol.Add(curLine)
  15.  
  16.    Else
  17.        mixedLineCol.Add(textLineCol1(index))
  18.  
  19.    End If
  20.  
  21. Next index
  22.  
  23. File.WriteAllLines("Fusionado.txt", mixedLineCol, Encoding.Default)

Archivo 1.txt:
Código
  1. Linea1
  2.  
  3. Linea 3
  4.  
  5. Linea 5

Archivo 2.txt:
Código
  1.  
  2. Linea 2
  3.  
  4. Linea 4
  5. Linea5 - Nueva
  6. Linea 6

Archivo Combinado.txt:
Código
  1. Linea1
  2. Linea 2
  3. Linea 3
  4. Linea 4
  5. Linea5 - Nueva
  6. Linea 6

Saludos!


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: javiert239 en 21 Junio 2015, 10:10
Muchas gracias, eso era exactamente lo que queria hacer. Lo probe y funciono sin ningun problema. Muchas gracias de nuevo.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: DonnySantiago en 26 Agosto 2015, 18:18
Hola buen dìa,

Soy nuevo en esto , tengo un archivo .txt que tiene cierto contenido xml , como por ejemplo :
<nombre> Donny </nombre>
Pero hay casos que este archivo contiene etiquetas de contenido vacio como por ejemplo:
<Numero> </numero>
Mi duda es la siguiente , como harìa para eliminar esas etiquetas de contenido vacio, claro esta que esas etiquetas pueden varias no solo serà <Numero></Numero> , sino tambien aparecerán etiquetas como <Direccion></Direccion> que también tendrán contenido vacio , esto lo puedo hacer con archivo batch ?


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: nyoz en 3 Septiembre 2015, 20:59
Buenas tardes,

tengo el siguiente código:

Código:
@echo off
del contador.log

FOR %%F IN (lis0*.txt) DO (
set /a contador=0
for /f "tokens=*" %%_ in (%%F) do (
set /a contador+=1
)
echo %%F>>contador.log
call :imprimir
)

:imprimir
echo %contador%>>contador.log

El código funciona para contar la cantidad de filas de un archivo de texto con la estructura: lis0*.txt, pero necesito ejecutarlo en un árbol de carpetas para todos los archivos con esa estructura, no sólo en la carpeta donde se ejecuta el bat.

Adicional, el log que sale es de la siguiente manera:

Citar
lis001_100_20150903.txt
29366
lis003_100_20150903.txt
366
lis004_100_20150903.txt
66
lis013_100_20150903.txt
293
293

Donde se repite el último número (no debería) o al menos así debería quedar el log:

Citar
lis001_100_20150903.txt|29366
lis003_100_20150903.txt|366
lis004_100_20150903.txt|66
lis013_100_20150903.txt|293

Desde ya les agradezco la colaboración.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Eleкtro en 14 Septiembre 2015, 08:47
El código funciona para contar la cantidad de filas de un archivo de texto con la estructura: lis0*.txt, pero necesito ejecutarlo en un árbol de carpetas para todos los archivos con esa estructura, no sólo en la carpeta donde se ejecuta el bat.

Entonces utiliza un For /R.



Adicional,

Donde se repite el último número (no debería)

Puedes utilizar el comando FIND para contar lineas.

Aquí tienes el código funcional:
Código
  1. @Echo Off & Setlocal EnableDelayedExpansion
  2.  
  3. Set "filePattern=lis0*.txt"
  4. Set "logfile=.\Contador.log"
  5.  
  6. (FOR /R %%F IN ("%filePattern%") DO (
  7.    For /F %%v in ('Find /V /C "" ^< "%%~fF"') Do (Set /A "count=%%v")
  8. Echo %%~nxF^|!count!
  9. ))>"%logfile%"
  10.  
  11. Type "%logfile%"
  12.  
  13. Pause&Exit /B 0

Saludos!


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: layra en 24 Septiembre 2015, 18:01
 :silbar: Como puedo extraer información de una base de datos de SQl serve 2008 con un archivo batch -- por favor ayudenmeeeeee siiiiiii  :-(  :-(


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: elqueteconte en 7 Octubre 2015, 23:12
Saludos;

He heredado el siguiente script:

copy /y blancos\*.TXT .

copy CM.txt + C:\carp1\Emp1\20150908\CM.txt CM.txt
copy GL.txt + C:\carp1\Emp1\20150908\GL.txt GL.txt
copy IMP6000.txt + C:\carp1\Emp1\20150908\IMP6000.txt IMP6000.txt
copy IMP6001.txt + C:\carp1\Emp1\20150908\IMP6001.txt IMP6001.txt
copy IMP6002.txt + C:\carp1\Emp1\20150908\IMP6002.txt IMP6002.txt
copy IMP6003.txt + C:\carp1\Emp1\20150908\IMP6003.txt IMP6003.txt

copy CM.txt + C:\carp1\Emp1\20150909\CM.txt CM.txt
copy GL.txt + C:\carp1\Emp1\20150909\GL.txt GL.txt
copy IMP6000.txt + C:\carp1\Emp1\20150909\IMP6000.txt IMP6000.txt
copy IMP6001.txt + C:\carp1\Emp1\20150909\IMP6001.txt IMP6001.txt
copy IMP6002.txt + C:\carp1\Emp1\20150909\IMP6002.txt IMP6002.txt
copy IMP6003.txt + C:\carp1\Emp1\20150909\IMP6003.txt IMP6003.txt

copy CM.txt + C:\carp1\Emp1\20150910\CM.txt CM.txt
copy GL.txt + C:\carp1\Emp1\20150910\GL.txt GL.txt
copy IMP6000.txt + C:\carp1\Emp1\20150910\IMP6000.txt IMP6000.txt
copy IMP6001.txt + C:\carp1\Emp1\20150910\IMP6001.txt IMP6001.txt
copy IMP6002.txt + C:\carp1\Emp1\20150910\IMP6002.txt IMP6002.txt
copy IMP6003.txt + C:\carp1\Emp1\20150910\IMP6003.txt IMP6003.txt

copy CM.txt + C:\carp1\Emp1\20150911\CM.txt CM.txt
copy GL.txt + C:\carp1\Emp1\20150911\GL.txt GL.txt
copy IMP6000.txt + C:\carp1\Emp1\20150911\IMP6000.txt IMP6000.txt
copy IMP6001.txt + C:\carp1\Emp1\20150911\IMP6001.txt IMP6001.txt
copy IMP6002.txt + C:\carp1\Emp1\20150911\IMP6002.txt IMP6002.txt
copy IMP6003.txt + C:\carp1\Emp1\20150911\IMP6003.txt IMP6003.txt

copy CM.txt + C:\carp1\Emp1\20150912\CM.txt CM.txt
copy GL.txt + C:\carp1\Emp1\20150912\GL.txt GL.txt
copy IMP6000.txt + C:\carp1\Emp1\20150912\IMP6000.txt IMP6000.txt
copy IMP6001.txt + C:\carp1\Emp1\20150912\IMP6001.txt IMP6001.txt
copy IMP6002.txt + C:\carp1\Emp1\20150912\IMP6002.txt IMP6002.txt
copy IMP6003.txt + C:\carp1\Emp1\20150912\IMP6003.txt IMP6003.txt

Como pueden ver la variable "carp1"; "Emp1" son constantes pero la carpeta siguiente corresponde a los días del mes.

La idea es como hago para que cuando ejecuto el script le pase por parámetro el nombre de la Empresa y haga un recorrido por las carpetas que y vaya haciendo la copia hasta que consiga la ultima carpeta.

Desde ya mil gracias....


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: sorry en 23 Octubre 2015, 12:30
Buenas!!

No se si es posible, a ver que me contáis.

Me gustaría añadir el texto de un documento a otro en una zona concreta, después de una palabra para ser exactos.

Esto es posible?

Muchas gracias


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Eleкtro en 23 Octubre 2015, 13:08
añadir el texto de un documento a otro en una zona concreta, después de una palabra para ser exactos.

Se puede llevar a cabo, pero sería demasiado tedioso de conseguir y el resultado sería un código demasiado sucio e ineficiente. Esa tarea es algo muy complejo para un lenguaje limitado como es Batch.

El primer problema que se me ocurre es que tendrías que idear un tedioso algoritmo que iterarase todos los caracteres del archivo objetivo delimitándolo por el caracter espacio " " para poder identificar palabras hasta encontrar la palabra donde quieres insertar texto... sería como reinventar la rueda.

En este script que desarrollé hace tiempo, puedes encontrar algunos ejemplos de manipulación de texto, los cuales de por si ya son un lio.
[BATCH] [APORTE] Rutina TEXTMAN para manipular archivos de texto (http://foro.elhacker.net/scripting/batch_aporte_rutina_textman_para_manipular_archivos_de_texto-t372497.0.html;msg1789019#msg1789019)

No vale la pena el esfuerzo, ya te aviso. Tu mejor opción es usar un lenguaje apto.

En VBS podrías utilizar el método "Split" para partir el texto en dos según la palabra especificada, o también podrías utilizar una expresión regular para obtener la palabra y su posición.

En otros lenguajes más sofisticados como por ejemplo VB.Net/C# (solo por nombrar a los que estoy acostumbrado) sería mucho más sencillo, podrías utilizar las metodologías mencionados plus la función "String.IndexOf" y muchas otras más formas de llevarlo a cabo.

Saludos


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: sorry en 23 Octubre 2015, 13:12
Perdona pero de idea voy mas bien justo en esto de los scripts.

La verdad yo tengo un vbs para generar un código que luego engancho en un documento, me quería ahorrar el paso de estar abriendo el documento y pegando la cadena cada vez que ejecutase el vbs.

Puede no eligiera bien el tema del foro donde poner la duda :(


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: gucaza en 4 Noviembre 2015, 18:43
Hola a la web y a Leo Gutiérrez., necesito ayuda quiero lograr mediante un batch, cambiar el valor que se le da a Drive(0)=, ejemplo:

Winape.ini
[Drives]
Drive(0)="i:\amstrad_cpc\juegosdsk\buggy.dsk"
Drive(1)=         
Allow Write 0=false

por

Winape.ini
[Drives]
Drive(0)="i:\amstrad_cpc\juegoscpr\frogger 2.cpr"
Drive(1)=         
Allow Write 0=false


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: barao45 en 16 Noviembre 2015, 14:35
Leogtz, te hago una consulta. Me podras tirar alguna idea, para hacer un batch donde lee la primer linea de un archivo txt y necesito que me copie los primeros N caracteres y luego pegarlos en otro txt. sabes como podria hacerlo? es para un bat de windows.

Gracias!


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: MarcSerrano93 en 14 Diciembre 2015, 12:48
Buenos dias compañeros,
La verdad es que soy nuevo en este foro pero des de el dia que entré a trabajar y me pusieron ha hacer scripting es una de las paginas que más he visitado. Muchas gracias por la ayuda de antemano.

Mi pregunta es la siguiente. Tengo un archivo de configuración de Apache con el siguiente contenido:

<IfModule mpm_prefork_module>
    StartServers             5
    MinSpareServers          5
    MaxSpareServers         10
    MaxRequestWorkers      250
    MaxConnectionsPerChild   0
</IfModule>

<IfModule mpm_worker_module>
    StartServers             3
    MinSpareThreads         75
    MaxSpareThreads        250
    ThreadsPerChild         25
    MaxRequestWorkers      400
    MaxConnectionsPerChild   0
</IfModule>

Mi pregunta es si hay alguna manera de poder seleccionar unicamente un trozo de este archivo, es decir, "leer" unicamente el texto situado entre <IfModule mpm_worker_module> y </IfModule> de manera que la salida sea unicamente:

<IfModule mpm_worker_module>
    StartServers             3
    MinSpareThreads         75
    MaxSpareThreads        250
    ThreadsPerChild         25
    MaxRequestWorkers      400
    MaxConnectionsPerChild   0
</IfModule>

Muchas gracias! :D


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: dieboxxxx en 5 Junio 2016, 06:31
Hola buenas noches,

Como podria comparar dos directorios con BATCH y que me muestre en un archivo de texto aquellos que estàn repetidos?

Muchas Gracias


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: victorperezmon en 29 Septiembre 2016, 11:44
Buenos dias.

A ver si alguien me ilumina. Necesito buscar 4 cadenas de texto en un fichero. Solo va a existir una de ellas, es decir algo como

find ("cadena1" or "cadena2" or "cadena3" or "cadena4") fichero.txt

Es posible hacerlo con el comando find???

Si no pudiera ser asi la otra forma podria ser encontrar otra cadena en una linea y mostrar la siguiente linea que es donde estaria una de las 4 cadenas y despues hacer un chequeo con un if para ver si en esa linea exista una de las 4 cadenas a buscar.

Gracias por vuestra ayuda

Saludos


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Vapirox en 3 Noviembre 2016, 17:10
Buenas, tengo una duda con un archivo .bat

Una aplicación de seguridad me genera un archivo .log el cual yo visualizo con editor de texto bloc de notas. Me gustaría extraer una dirección ip que esta incluida en el archivo y generar un contador de cuantas veces consiguió la misma dirección ip, pasa que la dirección ip viene pegada de un signo =, viene de esta manera: srcip=192.168.0.1 y almacenar esto en otro txt.

por ejemplo:

192.168.0.1   4   encontradas
192.168.0.23 6   encontradas
192.168.0.41 9   encontradas
192.168.0.56 12 encontradas
192.168.0.78 78 encontradas

hasta el momento se como extraer una fila en especifico, pero no como recorrer el archivo txt completo e ir extrayendo esa direccion ip a una variable luego la variable le paso un if a ver si se repite y si se repite le sumo su contador y listo, en C++ permite recorrer los archivos txt por palabra y extraer cada palabra comparandola con lo que se quiere buscar. Aqui lo ideal seria extraer todas esas direccion ip y asignarles un contador.
 
espero me puedan ayudar, muchas gracias.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: acebo1993 en 7 Mayo 2017, 11:22
Buenos días.
Se trata de buscar en un fichero de texto (windows) aquellos servidores que tienen menos de 120.000.000 bytes
y posteriormente sacarlos a un fichero de salida.

En el primer campo tengo el servidor y en el cuarto y quinto el peso en bytes

AAAAAAAA.txt:              15 dirs  14.796.898.304 bytes libres
BBBBBBBB.txt:              16 dirs     159.109.120   bytes libres
CCCCCCCC.txt:              15 dirs      47.173.632    bytes libres
DDDDDDD.txt:              15 dirs   6.366.265.344  bytes libres
EEEEEEEE.txt:              14 dirs      65.318.912    bytes libres
FFFFFFFFF.txt:              15 dirs   6.662.930.432   bytes libres

Sería extraer los registros (quitando el ".txt" si puede ser) y mostrar en este caso sólo:

CCCCCCCC   47.173.632 bytes
EEEEEEEE   65.318.912 bytes   

Estoy probando con "for"lo siguiente pero al llegar al "DO" he probado con findstr, if etc y no hay manera:

- ejemplo:
@ECHO OFF

 for /F "tokens=1,4 delims= " %%a in (fich1.txt) do (
  echo %%a %%b
) > fichout.txt

- ejemplo2:

- @ECHO OFF
FOR /F "tokens=1,4" %%A %%B IN (fich1.txt) DO (FINDSTR -v -i "120.000.000 - 122.000.000.000")  > fichout.txt

Por favor si pueden orientarme muchas gracias y saludos cordiales


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Scry en 10 Mayo 2017, 17:04
Hola buenas, tengo una duda sobre un script que estoy haciendo para modificar unas variables a permanentes.
La cosa es que necesito saber como puedo pasar de esta linea:
SET Hola=adios
A esta:
SETX Hola "%PATH%";adios

El tema es que el "=" no se como eliminarlo/modificarlo mediante cmd, el resto de la linea he conseguido sacarla mediante esto (Con ello consigo añadir la "X" al set y el resto de la linea la copia también):

setlocal enabledelayedexpansion
for /f "tokens=* delims=" %%x in ('type IBERCFG.bat') do (
set linea=%%x
set linea=!linea:SET=SETX!
call :show !linea!
)
goto:eof
:show
echo %* >> out.txt
goto:eof

Muchas gracias.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Gamer50 en 22 Agosto 2017, 12:32
Hola me gustaria saber si puedo poner con el comando type que me salgan los numeros de las lineas. Perdon si ya hizieron esta pregunta pero tengo mucha prisa. :silbar:
Citar
Pregunta Extra
Código:
echo off & mode 50,50 & cls
set/p Properties= Archivo:
set Properties=%Properties:"=%
if not exist "%Properties%" (
echo Can't Find The File!
pause >nul & exit
)
for %%- in (%Properties%) do (echo  Atributes Of %Properties%:  %%~a-
pause >Nul & exit
Es posible q de este codigo salga el nombre del atributo y no la letra? (Ejemplo: -------H----- a -------Hide---) :rolleyes:


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: DekerMD en 1 Mayo 2018, 20:00
Buenas. disculpa me podrías ayudar.
ya intente de todo y nada :(
se podria hacer un batch para que ponga un (-) en los espacios.
Ejemplo: Mi madre se quiere ir?
y ocupo que quede ASI.
Mi - madre - se - quiere - ir?
Me ayudaría bastante con un batch ya que aun me faltan mas de 5,mil frases y creeame es muy aburrido :( de Antemano Gracias.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Eleкtro en 25 Junio 2018, 10:08
Me ayudaría bastante con un batch ya que aun me faltan mas de 5,mil frases y creeame es muy aburrido :( de Antemano Gracias.

Con una herramienta tan limitado como es Batch no puedes llevar a cabo ese tipo de reemplazamiento de caracteres de forma eficiente, sí puedes reemplazar " " por " - " multiples veces en una cadena de texto, pero eso implica que si hay dos espacios en blanco (o más) "  " entonces quedaría así: " -  - " y no puedes hacer nada por evitarlo ya que no puedes capturar/identificar todos los espacios en blanco de una cadena de texto en Batch. Como mucho podrías usar un búcle FOR para delimitar las palabras (ignorar los espacios en blanco y en su lugar añadir lo que quieras entre cada palabra delimitada) pero esto además de ser una solución engorrosa y un código horriblemente lento (en comparación con cualquier otro lenguaje de programación de hoy en día) debido a la naturaleza del procesamiento por lotes o Batch, también implicaría ciertos problemas innecesarios en el tratamiento de las cadenas de texto.

Mi recomendación: simplemente evita usar el anticuado y limitado Batch para cualquier cosa por que realmente no vale la pena usarlo para ningún tipo de tarea pudiendo usar cualquier otro lenguaje, en este caso cualquier otro lenguaje que soporte reemplazamiento de caracteres mediante el uso de expresiones regulares como por ejemplo Visual Basic Script o Powershell (por nombrar los que están soportados por Windows sin necesidad de instalar nada más), o en su defecto sencillamente puedes usar cualquier editor de texto avanzado como por ejemplo Sublime Text o Notepad++...

...en dos segundos tendrías esas 5.000 frases reemplazadas con la siguiente expresión regular de captura:
Código:
+

Y la siguiente expresión de reemplazamiento:
Código:
-

Saludos.


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: eaacprotecto en 24 Octubre 2018, 21:21
@leongtz

Hola, sobre este tema: Remover lineas en blanco de un archivo de texto :
Código:
@echo off
echo Mi archivo con lineas en blanco :
type "file.txt"
for /f %%x in ('type "file.txt"') do (
echo %%x >> file2.txt
)
echo.
echo Mi archivo sin lineas en blanco :
type file2.txt

Tengo la necesidad de 1. Trabajar con VARIOS archivos 2. Sustituir el caracter "\" por "/" (dentro del archivo). 3. Por lo tanto, que cada archivo modificado se sobre escriba (una vez hecha tal modificación).

ej. ECATEPEC 3_1_1_00001838-2817.IDX
     ECATEPEC 3_1_1_00001838-2818.IDX
     ECATEPEC 3_1_1_00001838-2819.IDX
     etc.

Yo he modificado el script sugerido de esta manera:

@echo off
pause
echo Mi archivo con lineas en blanco :
type "*.idx"
for /f %%x in ('type "*.idx"') do (
echo %%x >> file2.txt
)
echo
pause
echo Mi archivo sin lineas en blanco :
type file2.txt

Por lo que se junta la información de cada archivo en UNO SOLO, que en este caso es el file2.txt

Ojalá puedan ayudarme, ya que se trata de más de 10,000 archivos. Muchas gracias!


Título: Re: Acciones sobre archivos de texto. [Batch]
Publicado por: Puchu en 25 Octubre 2018, 11:00
Buenos días,

soy nuevo en el foro pero llevo más de 10 años visitándolo para mis dudas. Nunca antes he tenido que escribir para mis dudas, pero la verdad, no encuentro solución a mi pequeño problema.

Tengo este texto en un archivo .inf

07 (Este número me indica cuántas líneas hay en cada .inf)
100101 Bienvenida (40)* (Estas líneas son las que quiero modificar)
000102 Normas (08)*
100103 Plaza (15)*
000104 Iglesia (57)
100105 Av.España (25)*
000106 Correos (12)
000107 Final del dia (05)

Tengo una tarea repetitiva de que tengo más de 20 archivos .inf, con textos con este formato y lo único que le debo cambiar es:

A las líneas que empiecen con 1, cambiarlos por un 0. En los