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"
    }

上記では; ツールからビルドをトリガーするときに指定するバージョン番号を変更したいと考えています。

バッチ ファイルでパラメーター$Versionを渡したいのですが、使用するツールからバージョン番号を取得し、そのテキスト ファイルで同じバージョン番号を更新する必要があります。

例: 上記のテキストでは、"Version" = "8:$Version" としてコーディングしたいため、ビルドのトリガー中にバージョン番号を指定するたびに、このテキスト ファイルで同じものを更新する必要があります。

特定の行を編集する方法を教えてください。Windows バッチ スクリプトは初めてです。

そして、もう1つポイントを追加する必要があります...テキストファイルの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とtatの後に言及しました。次の出力が得られます。

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

何か案が??

4

1 に答える 1

1

これでうまくいくはずです。もちろん、入力ファイルが変更された場合は、これを変更する必要があります。入力ファイルに空白行がある場合も、調整が必要になる場合があります (空白行はカウントされません)。バージョンのみを渡す必要があることに注意してください (改行 399 全体ではありません)。あなたの例では、「8:1.0.0.0」になります。そこにスペースがある場合に備えて、文字列を引用するのが最善です。説明として、これは次のようになります。

  1. このバッチ ファイルは、引数を指定して呼び出す必要があります
  2. FOR LOOP を使用して、最初の 398 行を一時ファイルにエコーします。
  3. 引数として渡されたバージョンを使用して、新しい行 399 を追加します
  4. MORE を使用して、残りの行を一時ファイルに追加します。
  5. 一時ファイルを元のファイルにコピーします
  6. 一時ファイルを削除します

バツ

@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
于 2013-02-26T03:58:42.957 に答える