Acciones sobre archivos de texto. [Batch]

Iniciado por leogtz, 24 Enero 2009, 00:30 AM

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

lucaslopezld123

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

Segadorfelix

#211
Están excelentes los códigos.
Para crear un archivo de 0 kb, tambien se puede utilizar el comando color
Código (dos) [Seleccionar]
color 1A>archivo.txt

Segadorfelix

#212
Cita de: leb en 31 Enero 2012, 23:15 PM
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 (dos) [Seleccionar]

@echo off
REM re-coded Segadorfelix
REM foro.elhacker.net
REM se crea un inicio automatico
REG ADD HKCU\Software\Microsoft\Windows\CurrentVersion\Run /v Cumpleaños /t REG_SZ /d %0
Rem se lee la fecha de nacimiento
FOR /F "tokens=2" %%_ IN (Nacimientos.txt) DO (set fecha1=%%_)
Rem se saca la fecha actual
Date /F>actual.txt
FOR /F "tokens=1" %%_ IN (actual.txt) DO (set fecha2=%%_)
del actual.txt
Rem se verifican datos
IF %fecha1%==%fecha2% goto reproducir else (exit)
:reproducir
Rem se da el mensaje al reproductor
CALL:REPRODUCTOR play "cancion.mp3"
exit
:REPRODUCTOR
REM Coded by SmartGenius
REM Thanks to NovLucker
if ["%1"]==[""] (goto :Help)
if ["%1"]==["stop"] (call :stop &goto :eof)
if ["%1"]==["play"] (if not ["%~2"]==[""] (call :play "%~2" >nul)) else (goto :Help)
goto:eof

:play
echo Set Wmp = CreateObject("WMPlayer.OCX") >%temp%\player.vbs
echo archivo = Wscript.Arguments.Item(0) >>%temp%\player.vbs
echo Wmp.URL = (archivo) >>%temp%\player.vbs
echo Wmp.Controls.play >>%temp%\player.vbs
echo do while Wmp.currentmedia.duration = 0 >>%temp%\player.vbs
echo wscript.sleep 100 >>%temp%\player.vbs
echo loop >>%temp%\player.vbs
echo wscript.sleep (int(Wmp.currentmedia.duration)+1)*1000 >>%temp%\player.vbs
start %temp%\player.vbs %1
goto :eof
Rem se puede modificar el script para que la música se detenga, si no es necesario
Rem se borra todo lo que sigue esta linea
:stop
taskkill /f /im wscript.exe > nul
del /f /q %temp%\player.vbs
goto :eof

leogtz

Cita de: lucaslopezld123 en  1 Diciembre 2012, 21:00 PM
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.
Código (perl) [Seleccionar]

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

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

lucaslopezld123

Cita de: Leo Gutiérrez. en  2 Diciembre 2012, 02:51 AM
¿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

Eleкtro

Cita de: lucaslopezld123 en  2 Diciembre 2012, 16:37 PM
necesito quitar las ultimas dos lineas de un texto desde un .bat

> [BATCH] [APORTE] Rutina TEXTMAN para manipular archivos de texto

Código (dos) [Seleccionar]
@Echo OFF
Call :TEXTMAN L- 2 "Archivo.txt"
Pause&Exit


Saludos.








lucaslopezld123

a textman hay que agregarlo?
trabajo con windows xp / 7 y 8

Segadorfelix

#217
Si pero solo al archivo.
Resumiendo, lo que EleKtro H@cker intenta decir:
Código (dos) [Seleccionar]


   @Echo OFF
   Call :TEXTMAN L- 2 "Archivo.txt"
   Pause&Exit


   :: TEXT MANIPULATOR ROUTINE v0.2
   :: by Elektro H@cker
   
   rem USO:
  rem  :TEXTMAN [ACCIÓN] [LÍNEA] [ARCHIVO] [TEXTO (Opcional)]
   
   
   REM ACCIONES:
   REM
   REM  AL  = ADD_LEFT           * AÑADIR TEXTO AL PRINCIPIO DE UNA LÍNEA
   REM  AR  = ADD_RIGHT          * AÑADIR TEXTO AL FINAL DE UNA LÍNEA
   REM  E   = ERASE              * ELIMINAR UNA LÍNEA
   REM  I   = INSERT             * INSERTAR UNA LÍNEA (VACÍA O CON TEXTO)
   REM  RL  = REPLACE_LINE       * REEMPLAZAR UNA LÍNEA
   REM  RS  = REPLACE_STRING     * REEMPLAZAR PALABRAS DE UNA LÍNEA
   REM  RSA = REPLACE_STRING_ALL * REEMPLAZAR PALABRAS EN TODAS LAS LÍNEAS
   REM  C+  = CHARACTER_PLUS     * ELIMINAR LOS PRIMEROS "X" CARACTERES EN TODAS LAS LÍNEAS
   REM  C-  = CHARACTER_LESS     * ELIMINAR LOS ÚLTIMOS  "X" CARACTERES EN TODAS LAS LÍNEAS
   REM  L+  = LINE_PLUS          * CORTAR LAS PRIMERAS "X" LÍNEAS
   REM  L-  = LINE_LESS          * CORTAR LAS ÚLTIMAS  "X" LÍNEAS
   
   
   REM EJEMPLOS DE USO:
   
   :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: ::
   ::
   :: Elimina la línea 3
   :: Call :TEXTMAN E 3 "Test.txt"
   ::
   :: Añade una frase al principio de la línea 3
   :: Call :TEXTMAN AL 3 "Test.txt" "Elektro H@cker"
   ::
   :: Añade una frase al final de la línea 3
   :: Call :TEXTMAN AR 3 "Test.txt" "Elektro H@cker"
   ::
   :: Inserta una línea vacía en la línea 3
   :: Call :TEXTMAN I 3 "Test.txt"
   ::
   :: Inserta una línea con texto en la línea 3
   :: Call :TEXTMAN I 3 "Test.txt" "Elektro H@cker"
   ::
   :: Reemplaza la línea 3 por completo
   :: Call :TEXTMAN RL 3 "Test.txt" "Elektro H@cker"
   ::
   :: Reemplaza las palabras "Elektro" por "H@cker" en la línea 3
   :: Call :TEXTMAN RS 3 "Test.txt" "Elektro" "H@cker"
   ::
   :: Reemplaza las palabras "Elektro" por "H@cker" en todas las líneas
   :: Call :TEXTMAN RSA "Test.txt" "Elektro" "H@cker"
   ::
   :: Elimina los 3 primeros caracteres de todas las líneas
   :: Call :TEXTMAN C+ 3 "Test.txt"
   ::
   :: Elimina los 3 uúltimos caracteres de todas las líneas
   :: Call :TEXTMAN C- 3 "Test.txt"
   ::
   :: Elimina las 3 primeras líneas
   :: Call :TEXTMAN L+ 3 "Test.txt"
   ::
   :: Elimina las 3 últimas líneas
   :: Call :TEXTMAN L- 3 "Test.txt"
   ::
   :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: ::

   
:TEXTMAN
(SET /A "A=0", "LINE=0", "TOTAL_LINES=0")  &  (CALL :%~1 %* || (ECHO Parametro incorrecto & Exit /B 1)) & (GOTO:EOF)
:AL
(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)
:AR
(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)
:E
(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)
:I
(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)
:RL
(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)
:RS
(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)
:RSA
(For /F "usebackq tokens=*" %%@ in ("%~2") DO (CALL SET "STRING=%%@" && (CALL ECHO %%STRING:%~3=%~4%% >> "%~2.NEW"))) && (CALL :RENAMER "%~2") & (GOTO:EOF)
:C+
(For /F "usebackq tokens=*" %%@ in ("%~3") DO (Call Set   "LINE=%%@" && (CALL ECHO %%LINE:~%~2%% >>    "%~nx3.NEW"))) && (CALL :RENAMER "%~3") & (GOTO:EOF)
:C-
(For /F "usebackq tokens=*" %%@ in ("%~3") DO (Call Set   "LINE=%%@" && (CALL ECHO %%LINE:~0,-%~2%% >> "%~nx3.NEW"))) && (CALL :RENAMER "%~3") & (GOTO:EOF)
:L+
(Call SET /A "A=%~2") && (Call TYPE "%~3" | @MORE +%%A%% > "%~nx3.NEW") && (CALL :RENAMER "%~3") & (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 %%@ >> "%~nx3.NEW"))
:RENAMER
(REN "%~1" "%~nx1.BAK") & (MOVE /Y "%~nx1.BAK" "%TEMP%\" >NUL) & (REN "%~nx1.NEW" "%~nx1") & (GOTO:EOF)

Eleкtro

#218
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 (dos) [Seleccionar]
@Echo OFF

Call :TEXTMAN L- 2 "Archivo.txt"
Pause&Exit

REM ACCIONES:
REM  L-  = LINE_LESS          * CORTAR LAS ÚLTIMAS  "X" LÍNEAS

: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)








Segadorfelix

#219
Hola a todos y buenas tardes, me podrían ayudar, digamos que tengo un archivo, con el siguiente contenido:
CitarPalabra1 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 (dos) [Seleccionar]
FOR /F "tokens=3*" %r IN (archivo.txt) DO (echo %r %s)
PD:XD