使用批处理命令编辑文本文件中的特定行

问题描述:

我有一个包含以下文本的文本文件。使用批处理命令编辑文本文件中的特定行

“模块”

{ 
    "ModuleSignature" = "8:MergeModule.6F1248514B3047E99E4EE8A129CB8605" 
    "Version" = "8:1.0.0.0" 
    "Title" = "8:uoipmsm" 
    "Subject" = "8:" 
    "Author" = "8:Microsoft" 
    "Keywords" = "8:" 
    "Comments" = "8:" 
    "SearchPath" = "8:" 
    "UseSystemSearchPath" = "11:TRUE" 
    "TargetPlatform" = "3:1" 
    "PreBuildEvent" = "8:" 
    "PostBuildEvent" = "8:" 
    "RunPostBuildEvent" = "3:0" 
    } 

在上述;我想更改我从工具触发构建时要提供的版本号。

我想在批处理文件中传递参数$版本,它必须从我使用的工具中获取版本号,并在该文本文件中更新相同的版本号。

例如:在上面的文本中,我想将其编码为“版本”=“8:$版本”,因此当我在触发构建时提供版本号时,它必须在此文本文件中进行更新。

请你指导我如何编辑特定的行。我是windows批处理脚本的新手。

我想在文本文件中添加一个点...我必须在行号399中修改版本。所以批处理文件必须跳转到该文本文件中的第399行,并修改相同的。请帮我解决同...


我曾在一个文本垫保存上面的脚本并保存一样ver.bat;并在同一个文件夹中保存了Intext文件。当我提到要替换的行号时,它将从第1行删除“=”符号后面的内容到399。

之前运行的批处理文件:

"ModuleSignature" = "8:MergeModule.6F1248514B3047E99E4EE8A129CB8605" 
"Version" = "8:1.0.0.0" 
"Title" = "8:uoipmsm" 
"Subject" = "8:" 
"Author" = "8:Microsoft" 
"Keywords" = "8:" 
"Comments" = "8:" 
"SearchPath" = "8:" 
"UseSystemSearchPath" = "11:TRUE" 
"TargetPlatform" = "3:1" 
"PreBuildEvent" = "8:" 
"PostBuildEvent" = "8:" 
"RunPostBuildEvent" = "3:0" 

我提到的行数为10,达后,如果我运行该批处理文件;我得到以下输出;

"ModuleSignature" = 
"Version" = "" 
"Title" = 
"Subject" = 
"Author" = 
"Keywords" = 
"Comments" = 
"SearchPath" = 
"UseSystemSearchPath" = 
"TargetPlatform" = 
"PreBuildEvent" = 
"PostBuildEvent" = 
"RunPostBuildEvent" = 

任何想法?

这应该这样做。当然,如果你的输入文件改变了,这将不得不改变。如果输入文件中有空行(它们不计数),则可能还需要进行调整。请注意,您只需要传递版本(不是整个新行399)。在你的例子中将是“8:1.0.0.0”。如果在那里有空格,最好引用字符串。 通过解释,这将:

  1. 此bat文件必须以参数
  2. 使用for循环呼应第398行到一个临时文件
  3. 使用添加新行399被称为作为参数
  4. 使用更于各剩余行追加到临时文件
  5. 复制临时文件到原始文件
  6. 删除临时文件通过的版本

X

@echo off 
REM %1=Version (use quotes if there are spaces in version) 

set ReplaceLine=399 
set InFile=Test.txt 
set TempFile=TempTest.txt 
if exist "%TempFile%" del "%TempFile%" 

if "%~1"=="" (
    color CF 
    echo.This program must be called with an argument! 
    pause 
    goto :eof 
    ) 

setlocal enabledelayedexpansion 
set /A Cnt=1 
for /F "tokens" %%a in (%InFile%) do (
    echo.%%a>> "%TempFile%" 
    set /A Cnt+=1 
    if !Cnt! GEQ %ReplaceLine% GOTO :ExitLoop 
    ) 
:ExitLoop 
endlocal 

echo."Version" = "%~1">> "%TempFile%" 
more +%ReplaceLine% < "%InFile%">> "%TempFile%" 
copy /y "%TempFile%" "%InFile%" 
del "%TempFile%" 
goto :eof