Windows-使用脚本在一堆文件中查找/替换XML标记中的内容:sed of bash或cmd batch?

Windows-使用脚本在一堆文件中查找/替换XML标记中的内容:sed of bash或cmd batch?,xml,windows,batch-file,sed,git-bash,Xml,Windows,Batch File,Sed,Git Bash,在我的Windows 10中,在同一目录下有100多个XML文件,它们包含相同的标记,比如说,具有不同的内容,例如4564564或7777 现在,我想用123456替换所有不同的值 我安装了gitbash,发现sed可能有用。但是,恕我直言,bash中的for无法迭代目录下的文件,而且我不知道在bash中迭代文件的其他方法,相反,Windows批处理中的for可以(如果我错了,请纠正我)。所以 我是否可以使用批处理FOR进行迭代,并在循环中使用bash的sed,即混合使用GNU bash命令和

在我的Windows 10中,在同一目录下有100多个XML文件,它们包含相同的标记,比如说
,具有不同的内容,例如
4564564
7777

现在,我想用
123456
替换所有不同的值

我安装了gitbash,发现sed可能有用。但是,恕我直言,
bash
中的
for
无法迭代目录下的文件,而且我不知道在bash中迭代文件的其他方法,相反,Windows批处理中的
for
可以(如果我错了,请纠正我)。所以

  • 我是否可以使用批处理
    FOR
    进行迭代,并在循环中使用bash的
    sed
    ,即混合使用GNU bash命令和cmd命令?当我测试时,这似乎是不可能的
  • 如果前一个是不可能的,我可以这样做,或者在纯bash脚本中,或者在纯批处理中
我得到的是这样一批:

@echo on
setlocal ENABLEEXTENSIONS
set here=%cd%
for /R %here% %%G in (*.xml) do (
    echo %%G
    for /F "skip=2 tokens=* " %%H in (%%G) do (
        echo %%H | sed -r 's:<Number>([0-9]+)</Number>:<Number>123456</Number>:'
    )
)
endlocal
我已经安装了Git bash,显然,
sed.exe
可以在Git bash和
cmd
中找到。在
cmd
中,
sed--version
给了我:

sed (GNU sed) 4.2.2
...

这将是一个纯粹的
sed
解决方案:

sed -r 's:<Number>([0-9]+)</Number>:<Number>123456</Number>:' -i *.xml

伟大的解决方案,在这里工作!现在我想知道批处理爱好者会说什么…我不确定批处理爱好者会说什么,但PowerShell爱好者会说使用。Unix爱好者会说:过来,我们有(更多)饼干
sed -r 's:<Number>([0-9]+)</Number>:<Number>123456</Number>:' -i *.xml
for file in *.xml; do
    echo "Processing file: $file"
    sed -r 's:<Number>([0-9]+)</Number>:<Number>123456</Number>:' -i "$file"
    # ...
done