Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于指定参数id更改XML中的值_Xml_Batch File_Cmd - Fatal编程技术网

基于指定参数id更改XML中的值

基于指定参数id更改XML中的值,xml,batch-file,cmd,Xml,Batch File,Cmd,原始文件(Test.xml) 120 120 120 00000001 1. CMD脚本 @echo off setlocal enableextensions disabledelayedexpansion set "old=" set "new=3" for /f "tokens=3 delims=<>" %%a in ( 'find "e" "C:\Test.xml"' ) do set "old=%%a"

原始文件(Test.xml)


120
120
120
00000001
1.
CMD脚本

@echo off
    setlocal enableextensions disabledelayedexpansion

    set "old="
    set "new=3" 

    for /f "tokens=3 delims=<>" %%a in (
        'find "e" "C:\Test.xml"'
    ) do set "old=%%a"

    powershell -Command "(gc C:\Test.xml) -replace '%old%', '%new%' | Out-File -encoding ASCII C:\Test.xml"

exit 0
<?xml version="1.0" encoding="Shift_JIS"?>
<root>
    <!--標準項目-->
    <parameters kind="standard">
        <parameter id="a" name="replace">320</parameter>
        <parameter id="b" name="replace">320</parameter>
        <parameter id="c" name="replace">320</parameter>
        <parameter id="d" name="replace">00000003</parameter>
        <parameter id="e" name="replace">3</parameter>
    </parameters>
</root>
@echo关闭
setlocal enableextensions disabledelayedexpansion
设置“old=”
设置“新建=3”
对于/f“tokens=3 delims=“%%a in(
'查找“e”“C:\Test.xml”'
)是否设置“旧=%%a”
powershell-命令“(gc C:\Test.xml)-替换“%old%”、“%new%”| Out文件-编码ASCII C:\Test.xml”
出口0
修改文件(执行CMD脚本后)


320
320
320
00000003
3.
  • 因此,在执行CMD脚本后,它不会检查指定id,并将每行中的所有值1更改为3
  • 有人能建议CMD脚本中哪些代码错误以及如何修复它吗
    如果源数据保持这样的格式,则以下命令将起作用。我承认,如果源文本发生变化,这是脆弱的,但我不完全了解您的要求

    Get-Content test.xml | ForEach-Object { $_ -replace '(.*id="e".*>).*(</p.*)', '${1}3$2' }
    

    Get Content test.xml | ForEach对象{$\u-replace'(.*id=“e”。*>).*(查找“e”的
    C:\test.xml的输出是什么
    command?CHCP
    命令的输出是什么?另外,请注释掉或删除
    @echo off
    ,以查看发生了什么。需要的输出是什么?需要的输出只是为了更改id=“e”值为3。其他值与原始值相同。我已尝试删除@echo off,但结果仍然相同。
    Get-Content test.xml | ForEach-Object { $_ -replace '(.*id="e".*>).*(</p.*)', '${1}3$2' }