如何在一行结尾处查找和替换变量赋值?

时间:2014-01-06 20:35:38

标签: windows batch-file replace delay expansion

使用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。

我已经找到了许多关于如何用另一个字符串替换静态字符串的答案,但我还没有找到关于改变变量值的任何内容,更不用说在一行的末尾。还有我发现的答案,我一直不确定如何处理等号。

2 个答案:

答案 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"