0

数行のテキストを追加する必要がある一連のXMLファイルがありますが、追加のテキストの配置は非常に重要です。そうしないと、XMLファイルが機能しなくなります。

<Tools>幸い、新しいテキストは、各XMLファイルで1回だけ出現するテキストの後に挿入する必要があります。

<Tools>Windowsバッチを使用してテキストを検索し、その直後に追加のテキストを挿入するにはどうすればよいですか?(議論のために、追加されるテキストはであるとしましょう<HELLO WORLD>

敬具

編集:

<Tools>のすべてのインスタンスをに置き換える必要があることに気づきました<Tools> <HELLO WORLD>

これどうやってするの?

編集2:

以下は、うまく機能するが引用符では機能しないvbsです。

テキストを別のファイルのテキストコンテンツに置き換える方法はありますか

    Const ForReading = 1
Const ForWriting = 2

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("C:\Text.txt", ForReading)

strText = objFile.ReadAll
objFile.Close
strNewText = Replace(strText, "CH1", "*901*")

Set objFile = objFSO.OpenTextFile("C:\Text.txt", ForWriting)
objFile.WriteLine strNewText
objFile.Close 
4

2 に答える 2

0

問題の原因となる見積もりはどこで使用されますか?

テキストを別のファイルのテキストコンテンツに置き換える方法はありますか?特定の部分だけを別のファイルの部分に置き換えるということですか?

以下では、ソースファイル内の文字列を検索し、挿入を含む新しいファイルを出力します。

:: Hide Command and Isolate Scope with Command Extensions
@echo off
setlocal EnableExtensions DisableDelayedExpansion

:: See the following for help
rem echo /?
rem setlocal /?
rem for /?
rem type /?
rem find /?
rem del /?


:: Setup
set "xIn=Test.xml"
set "xOut=Output.xml"
set "xTerm=<Tools>"
set "xInsert=^<HELLO WORLD^>"


:: Validate
if not defined xIn goto End
if not defined xOut goto End


:: Place on Seperate Line Method
if defined xOut if exist "%xOut%" del /f /q "%xOut%" > nul
for /f "usebackq tokens=*" %%a in (`type %xIn%`) do (
    echo.%%a >> %xOut%
    for /f "usebackq tokens=*" %%x in (`echo."%%a" ^| find "%xTerm%"`) do (
        echo.%xInsert% >> %xOut%
    )
)


:: Setup
set "xOut=Output2.xml"


:: Validate
if not defined xOut goto End


:: Place on the Same Line Method
if defined xOut if exist "%xOut%" del /f /q "%xOut%" > nul
for /f "usebackq tokens=*" %%a in (`type %xIn%`) do (
    for /f "usebackq tokens=*" %%x in (`echo."%%a" ^| find /v "%xTerm%"`) do (
        echo.%%a >> %xOut%
    )
    for /f "usebackq tokens=*" %%x in (`echo."%%a" ^| find "%xTerm%"`) do (
        echo.%%a %xInsert% >> %xOut%
    )
)

:End
endlocal

編集:これは、検索語を含む行をファイルの内容に置き換える上記のスクリプトの修正バージョンです。引用をうまく処理する必要があります。使用方法については、スクリプトのcallコマンドを参照してください。

:: Hide Command
@echo off

set "xResult="
call :ReplaceWith xResult "Source.xml" "<Tools>" "Input.xml" "Output.xml"
echo.%xResult%

goto End


::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:ReplaceWith <xReturn> <Source File> <Search Term> <Input File> <Output File>
:: Replace a line in the source file containing the search term with the entire
:: contents of the input file and save the changes to the output file.
:::: Note: Only supports single line search terms.
:: Returns the number of lines replaced.  -1 for error.

:: Hide Commands, Isolate Scope, and Set Abilities
@echo off
setlocal EnableExtensions DisableDelayedExpansion

:: Setup
set "xResult=-1"
set "xSource=%~2"
set "xTerm=%~3"
set "xInput=%~4"
set "xOut=%~5"

:: Validate
if not defined xSource goto EndReplaceWith
if not exist "%xSource%" goto EndReplaceWith
if not defined xTerm goto EndReplaceWith
if not defined xInput goto EndReplaceWith
if not exist "%xInput%" goto EndReplaceWith
set "xResult=0"

:: Search
type nul > %xOut%
for /f "usebackq tokens=* delims=" %%a in (`type "%xSource%"`) do (
    for /f "usebackq tokens=*" %%x in (`echo."%%a" ^| find /v "%xTerm%"`) do (
        echo.%%a>> %xOut%
    )
    for /f "usebackq tokens=*" %%x in (`echo."%%a" ^| find "%xTerm%"`) do (
        type "%xInput%" >> %xOut%
        echo.>> %xOut%
        set /a "xResult+=1"
    )
)
:EndReplaceWith
endlocal & if not "%~1"=="" set "%~1=%xResult%"
goto :eof
:: by David Ruhmann


:End
endlocal
于 2012-12-07T18:55:37.373 に答える
0

XSLTを使用または構築し、それを適用してXMLを有効に保つ方が安全ではないでしょうか。このオプションを検討する場合は、バッチファイルで使用するAltovaXML(無料のコミュニティエディション)などのコマンドラインxsltプロセッサを使用することをお勧めします。
Visual Studio / Notepad ++ / Emacs / Eclipse/…などの多くのIDE/コードエディターには、XSLT(統合されている場合もあれば、プラグインやアドオンを使用している場合もあります)を適用およびデバッグする方法もあります。これは、変換の作成時に便利です。

于 2012-12-09T14:36:26.837 に答える