Título: [BATCH] [APORTE] Rutina TEXTMAN para manipular archivos de texto Publicado por: Eleкtro en 2 Octubre 2012, 15:58 pm Las dudas más frecuentes sobre Batch suelen ser sobre la manipulación de texto, así que he creado esta rutina para que tengan esta pequeña ayuda.
A diferencia del 99% de rutinas parecidas a esta, mi código respeta los caracteres especiales al no usar la expansión. Por contra, resulta más lento el proceso. - ¿Que funciones tiene?
Por ejemplo, para eliminar la linea 5 en un archivo de texto lo usariamos así: Código: Call :TEXTMAN E 5 "Archivo.txt" Léanse la ayuda que está escrita dentro del código antes de usarlo. Espero que a alguien le sirva de ayuda. Saludos. Versión 0.5 Código: @Echo OFF :: TEXT MANIPULATOR ROUTINE v0.5 :: by Elektro H@cker REM SYNTAX: :: :: TEXTMAN [ACTION] [LINE(S)] [FILE] [TEXT] :: :: * [LINE(S)] parameter is Optional for some actions :: * [TEXT] parameter is Optional for some actions REM ACTIONS: :: :: AB = ADD_BEGINNING * Add text to the beginning of a line. :: AE = ADD_ENDING * Add text to the end of a line. :: E = ERASE * Delete a line. :: I = INSERT * Add a empty line (Or a line with text). :: RL = REPLACE_LINE * Replace a entire line. :: RS = REPLACE_STRING * Replace word from line. :: RSA = REPLACE_STRING_ALL * Replace word from all lines. :: C+ = CHARACTER_PLUS * Delete the first "X" characters from all lines. :: C- = CHARACTER_LESS * Delete the last "X" characters from all lines. :: L+ = LINE_PLUS * Cut the first "X" amount of lines. :: L- = LINE_LESS * Cut the last "X" amount of lines. :: GL = GET_LINE * Delete all except "X" line. :: GR = GET_RANGE * Delete all except "X" range of lines. REM EXAMPLES: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: Delete the line 3 :: :: Call :TEXTMAN E 3 "Test.txt" :: :: :: :: Add a string to the beginning of line 3 :: :: Call :TEXTMAN AL 3 "Test.txt" "Elektro H@cker" :: :: :: :: Add a string to the end of line 3. :: :: Call :TEXTMAN AR 3 "Test.txt" "Elektro H@cker" :: :: :: :: Add a empty line at line 3. :: :: Call :TEXTMAN I 3 "Test.txt" :: :: :: :: Add a line with a word at line 3. :: :: Call :TEXTMAN I 3 "Test.txt" "Elektro H@cker" :: :: :: :: Replace the line 3 with "Elektro H@cker". :: :: Call :TEXTMAN RL 3 "Test.txt" "Elektro H@cker" :: :: :: :: Replace the words "Elektro" to "H@cker" in line 3. :: :: Call :TEXTMAN RS 3 "Test.txt" "Elektro" "H@cker" :: :: :: :: Replace the words "Elektro" to "H@cker" in all lines. :: :: Call :TEXTMAN RSA "Test.txt" "Elektro" "H@cker" :: :: :: :: Delete the first 3 characters in all lines. :: :: Call :TEXTMAN C+ 3 "Test.txt" :: :: :: :: Delete the last 3 characters in all lines. :: :: Call :TEXTMAN C- 3 "Test.txt" :: :: :: :: Delete the first 3 lines. :: :: Call :TEXTMAN L+ 3 "Test.txt" :: :: :: :: Delete the last 3 lines. :: :: Call :TEXTMAN L- 3 "Test.txt" :: :: :: :: Delete all except the line number 3. :: :: Call :TEXTMAN SL 3 "Test.txt" :: :: :: :: Delete all except the 3 to 9 range of lines. :: :: Call :TEXTMAN SR 3 9 "Test.txt" :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :TEXTMAN (SET /A "A=0", "LINE=0", "TOTAL_LINES=0") & (CALL :%~1 %* || (ECHO Invalid parameter & Exit /B 1)) & (GOTO:EOF) :AB (For /F "tokens=1* delims=]" %%A in ('type "%~3" ^| find /n /v ""') DO (Call Set /A "LINE+=1" && (CMD /C "IF NOT "%%LINE%%" EQU "%~2" (if "%%B" EQU "" (Echo+>> "%~3.NEW") ELSE ((Echo %%B)>> "%~3.NEW")) ELSE (if "%%B" EQU "" ((Echo %~4)>> "%~3.NEW") ELSE ((Echo %~4%%B)>> "%~3.NEW"))"))) && (CALL :RENAMER "%~3") & (GOTO:EOF) :AE (For /F "tokens=1* delims=]" %%A in ('type "%~3" ^| find /n /v ""') DO (Call Set /A "LINE+=1" && (CMD /C "IF NOT "%%LINE%%" EQU "%~2" (if "%%B" EQU "" (Echo+>> "%~3.NEW") ELSE ((Echo %%B)>> "%~3.NEW")) ELSE ((Echo %%B%~4)>> "%~3.NEW")"))) && (CALL :RENAMER "%~3") & (GOTO:EOF) :E (For /F "tokens=1* delims=]" %%A in ('type "%~3" ^| find /n /v ""') DO (Call Set /A "LINE+=1" && (CMD /C "IF NOT "%%LINE%%" EQU "%~2" (if "%%B" EQU "" (Echo+>> "%~3.NEW") ELSE ((Echo %%B) >> "%~3.NEW"))"))) && (CALL :RENAMER "%~3") & (GOTO:EOF) :I (For /F "tokens=1* delims=]" %%A in ('type "%~3" ^| find /n /v ""') DO (Call Set /A "LINE+=1" && (CMD /C "IF "%%LINE%%" EQU "%~2" (IF NOT "%~4" EQU "" ((Echo %~4) >> "%~3.NEW") ELSE (Echo+>> "%~3.NEW"))" & (if "%%B" EQU "" (Echo+>> "%~3.NEW") ELSE ((Echo %%B)>> "%~3.NEW"))))) && (CALL :RENAMER "%~3") & (GOTO:EOF) :RL (For /F "tokens=1* delims=]" %%A in ('type "%~3" ^| find /n /v ""') DO (Call Set /A "LINE+=1" && (CMD /C "IF NOT "%%LINE%%" EQU "%~2" (if "%%B" EQU "" (Echo+>> "%~3.NEW") ELSE ((Echo %%B)>> "%~3.NEW")) ELSE ((Echo %~4)>> "%~3.NEW")"))) && (CALL :RENAMER "%~3") & (GOTO:EOF) :RS (For /F "tokens=1* delims=]" %%A in ('type "%~3" ^| find /n /v ""') DO (Call Set /A "LINE+=1" && (CMD /C "IF NOT "%%LINE%%" EQU "%~2" (if "%%B" EQU "" (Echo+>> "%~3.NEW") ELSE ((Echo %%B)>> "%~3.NEW")) ELSE (CALL SET "STRING=%%B" && (if "%%B" EQU "" (Echo+>> "%~3.NEW") ELSE ((CALL ECHO %%STRING:%~4=%~5%%)>> "%~3.NEW")))"))) && (CALL :RENAMER "%~3") & (GOTO:EOF) :RSA (For /F "tokens=1* delims=]" %%A in ('type "%~2" ^| find /n /v ""') DO (CALL SET "STRING=%%B" && (if "%%B" EQU "" (Echo+>> "%~2.NEW") ELSE ((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%% >> "%~3.NEW"))) && (CALL :RENAMER "%~3") & (GOTO:EOF) :C- (For /F "usebackq tokens=*" %%@ in ("%~3") DO (Call Set "LINE=%%@" && (CALL ECHO %%LINE:~0,-%~2%% >> "%~3.NEW"))) && (CALL :RENAMER "%~3") & (GOTO:EOF) :L+ (Call SET /A "A=%~2") && (Call TYPE "%~3" |@MORE +%%A%% > "%~3.NEW") && (CALL :RENAMER "%~3") & (GOTO:EOF) :L- (For /F "tokens=1* delims=]" %%A in ('type "%~3" ^| find /n /v ""') DO (CALL SET /A "TOTAL_LINES+=1")) & (CALL SET /A "TOTAL_LINES-=%~2-1") & (For /F "tokens=1* delims=]" %%A in ('type "%~3" ^| find /n /v ""') DO (Call Set /A "LINE+=1" & Call echo "%%LINE%%"|@FIND "%%TOTAL_LINES%%" >NUL) && (CALL :RENAMER "%~3" && GOTO:EOF) || (Echo %%B >> "%~3.NEW")) :GL (Call SET /A "A=%~2" && Call SET /A "A-=1") && (Call TYPE "%~3" |@MORE +%%A%% > "%temp%\getline.tmp") && (For /F "tokens=1* delims=]" %%A in ('type "%temp%\getline.tmp" ^| find /n /v ""') DO ((if "%%B" EQU "" (Echo+>> "%~3.NEW") ELSE ((Echo %%B)> "%~3.NEW"))) && ((CALL :RENAMER "%~3") & (GOTO:EOF))) :GR (For /F "tokens=1* delims=]" %%A in ('type "%~4" ^| find /n /v ""') DO (Call Set /A "LINE+=1" && (CMD /C "(IF "%%LINE%%" GEQ "%~2" IF "%%LINE%%" LEQ "%~3" (if "%%B" EQU "" (Echo+>> "%~4.NEW") ELSE ((Echo %%B)>> "%~4.NEW"))) && (IF "%%LINE%%" EQU "%~3" Exit /B 1)" || ((CALL :RENAMER "%~4") & (GOTO:EOF))))) :RENAMER (REN "%~1" "%~nx1.BAK") & (MOVE /Y "%~1.BAK" "%TEMP%\" >NUL) & (REN "%~1.NEW" "%~nx1") & (GOTO:EOF) Título: Re: [BATCH] [APORTE] Rutina TEXTMAN para manipular archivos de texto Publicado por: Rikosky en 15 Marzo 2014, 15:12 pm 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: [BATCH] [APORTE] Rutina TEXTMAN para manipular archivos de texto Publicado por: FranciskoAsdf en 15 Marzo 2014, 15:17 pm Que buen aporte! (como siempre :D), yo que manipulo muchos archivos en el trabajo me sirve mucho para aprender y para -porfin- tener una forma rapida de donde sacar ejemplos y asi aplicarlos a otros Scripts !!
Muchas Gracias!! |