使用Windows批处理脚本,我正在尝试搜索并替换文件中的变量赋值。
由于分配的值总是在变化,因为变量位于行的末尾,所以很奇怪。以下是该文件包含的内容:
*##========================================================
*## This file was generated on 09-18-2007 at 10:21:56
*##========================================================
DEBUG-LEVEL = 10 APP-DELIVERY = 35
PROGRAM-CONTROL...
DUPLICATE-CONDITION-CHECK = N
GENERATE-SETUP = N
GENERATE-ENV = Y
我正在尝试替换APP-DELIVERY变量的赋值,所以我想编写一个脚本,例如将35更改为36。
我已经找到了许多关于如何用另一个字符串替换静态字符串的答案,但我还没有找到关于改变变量值的任何内容,更不用说在一行的末尾。还有我发现的答案,我一直不确定如何处理等号。
答案 0 :(得分:0)
@ECHO OFF
SETLOCAL
(
FOR /f "tokens=1*delims=:" %%a IN ('findstr /n /r "^" q20958786.txt') DO (
SET line=%%b
CALL :subs %1
)
)>newfile.txt
GOTO :EOF
:subs
:: Empty line?
IF NOT DEFINED line echo(&GOTO :EOF
:: What's after APP-DELIVERY[space]?
SET lineend=%line:*APP-DELIVERY =%
:: No APP-DELIVERY[sp]?
IF "%lineend%"=="%line%" echo(%line%&GOTO :EOF
:: Does the end part start "= " ?
IF NOT "%lineend:~0,2%"=="= " echo(%line%&GOTO :EOF
:: If so, see whether it terminates with a decimal number
SET lineend=%lineend:~2%
SET "value="
SET /a value=%lineend% >NUL 2>NUL
:: Value will now have that decimal or be empty
IF NOT "%value%"=="%lineend%" echo(%line%&GOTO :EOF
:: Valid decimal - lop off the end of the line, character-by-character
:loploop
SET line=%line:~0,-1%
SET lineend=%lineend:~1%
IF DEFINED lineend GOTO loploop
:: Plug our replacement supplied as %1 to the batch.
ECHO(%line%%1
GOTO :eof
这是一个应该按要求执行的批处理。它会读取您的输入文件(我已将其命名为q20958786.txt
- 您所谓的由您决定)并生成输出文件newfile.txt
。
评论应该表明你正在发生。
以thisbatch replacementvalue
答案 1 :(得分:0)
这应该将35更改为您喜欢的任何内容。它在下面的代码中是36。
它使用名为repl.bat
的帮助程序批处理文件 - 从https://www.dropbox.com/s/qidqwztmetbvklt/repl.bat
将repl.bat
放在与批处理文件相同的文件夹中或放在路径上的文件夹中。
type "file.log" | repl "(^DEBUG-LEVEL = .*APP-DELIVERY =).*" "$1 36" >"newfile.log"