2013-02-25 70 views
2

我有一個包含以下文本的文本文件。使用批處理命令編輯文本文件中的特定行

「模塊」

{ 
    "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" = 

任何想法?

回答

1

這應該這樣做。當然,如果你的輸入文件改變了,這將不得不改變。如果輸入文件中有空行(它們不計數),則可能還需要進行調整。請注意,您只需要傳遞版本(不是整個新行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