我想在文件的特定行中写入一些文本,例如我想在第 12 行和第 13 行中写入,并且我需要每 5 秒执行一次。
如何使用批处理脚本来做到这一点?
我想在文件的特定行中写入一些文本,例如我想在第 12 行和第 13 行中写入,并且我需要每 5 秒执行一次。
如何使用批处理脚本来做到这一点?
您可以使用我的例程,我会建议您该代码对于特殊的文本文件并不完美,例如,如果一行文本以]
字符开头,但对于简单/普通的文本文件,这将非常有效,只需尝试一下:
@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)
在第 12 行插入带有自定义文本的新行的示例用法:
Call :TEXTMAN I 12 "File.txt" "Text"
如果您有 Win32,您可以尝试编写 edlin 脚本。
埃德林脚本
12
Write new text on line 12
13
Write newtext on line 13
e
命令行
edlin "c:\something\somefile.txt < c:\edlin.script