5

複数のタグを含む XML ファイルがあり、これらのタグの 1 つの内容をバッチ スクリプトで変更しようとしています。

xml ファイルの例は次のとおりです。

<ConfigurationData>
<ReportsFolder>\Reports</ReportsFolder>
<Helpfolder>\Help</HelpFolder>
<InstallationType>Terminal</InstallationType>
<LicenseFolder>..\License</LicenseFolder>
</ConfigurationData>

選択した別の変数の間<InstallationType>でデータを変更しようとしています。</InstallationType>xml ファイルのその部分を見つけるには、ある種の For ループが必要だと考えていますが、その 1 つのセクションだけを編集する方法がわかりません。

4

3 に答える 3

13

XML を操作するために特別に設計されたツールを使用する必要があります。

しかし、いざという時には、正規表現の検索と置換が可能なツールを使用して、ファイルをレイアウトしたとおりに機能する単純なソリューションを実行できますが、論理的に同等の XML ファイルでは失敗する可能性があります。レイアウトを組み直しました。

私が作成したREPL.BATというハイブリッド JScript/バッチ ユーティリティを使用して、バッチ スクリプトを介してテキスト ファイルを操作するのが好きです。このスクリプトは、XP 以降のネイティブ Windows マシンで実行され、サードパーティの実行可能ファイルをインストールする必要はありません。リンクをクリックすると、スクリプト コードと詳細な説明が表示されます。

REPL.BAT を使用すると、高速で効率的ですが単純なソリューションは次のように単純になります。

setlocal enableDelayedExpansion
set "newValue=myNewValue"
type "fileName.xml"|repl "(<InstallationType>).*(</InstallationType>)" "$1!newValue!$2" >fileName.xml.new
move /y "fileName.xml.new" "fileName.xml"
于 2013-06-12T04:44:15.197 に答える
11
@echo off
setlocal EnableDelayedExpansion

set anotherVariable=New value

(for /F "delims=" %%a in (theFile.xml) do (
   set "line=%%a"
   set "newLine=!line:InstallationType>=!"
   if "!newLine!" neq "!line!" (
      set "newLine=<InstallationType>%anotherVariable%</InstallationType>"
   )
   echo !newLine!
)) > newFile.xml

サンプル データを出力します。

<ConfigurationData>
<ReportsFolder>\Reports</ReportsFolder>
<Helpfolder>\Help</HelpFolder>
<InstallationType>New value</InstallationType>
<LicenseFolder>..\License</LicenseFolder>
</ConfigurationData>
于 2013-06-11T22:17:28.113 に答える