使用 XMLLINT.exe 批量漂亮打印 XML 失败
Batch pretty printing XML with XMLLINT.exe fails
我有很多子目录,XML-文件都在一行中。为了漂亮地打印它们,我使用了 xmllint,它工作得很好。所以我想写一个批处理脚本,它在所有子目录中执行 xmllint.exe 。这是我目前所拥有的:
setlocal enabledelayedexpansion
for /D /r %%d in (./*) do (
pushd %%d
for %%x in (*.xml) do (
ren %%x %%~nx.old
::Get the filename, without the .old-extension
set "filename=%%~nx"
set "extension=.xml"
::Concatenate filename and extension
set "finalname=!filename!!extension!"
%~dp0\xmllint.exe %%x >> !finalname!
del %%~nx.old
)
popd
)
但是我有两个问题:
1.) 当我执行此操作时出现错误:异常:System.IO.IOException:进程无法访问该文件,因为另一个进程正在使用它。
但我检查过其他所有内容都已关闭。
2.) 当我用单个文件测试它时我注意到,一旦我有一个文件,它有点损坏(例如错过一个结束标签),它也会给我一个错误,它可以'格式化它,因为标签丢失了。
是否有 xmllint 的一些选项,以将其压制并打印出来?
谢谢!
在您的代码中,路径格式不正确。你还必须引用每个 xmlint arguments
@echo off
for /R %%a in (*.xml) do (
rem :: make a copy
copy "%%~a" "%%~dpna.old"
"%~dp0xmllint.exe" "%%~dpna.old">> "%%~a"
del "%%~dpna.old"
)
我有很多子目录,XML-文件都在一行中。为了漂亮地打印它们,我使用了 xmllint,它工作得很好。所以我想写一个批处理脚本,它在所有子目录中执行 xmllint.exe 。这是我目前所拥有的:
setlocal enabledelayedexpansion
for /D /r %%d in (./*) do (
pushd %%d
for %%x in (*.xml) do (
ren %%x %%~nx.old
::Get the filename, without the .old-extension
set "filename=%%~nx"
set "extension=.xml"
::Concatenate filename and extension
set "finalname=!filename!!extension!"
%~dp0\xmllint.exe %%x >> !finalname!
del %%~nx.old
)
popd
)
但是我有两个问题:
1.) 当我执行此操作时出现错误:异常:System.IO.IOException:进程无法访问该文件,因为另一个进程正在使用它。
但我检查过其他所有内容都已关闭。
2.) 当我用单个文件测试它时我注意到,一旦我有一个文件,它有点损坏(例如错过一个结束标签),它也会给我一个错误,它可以'格式化它,因为标签丢失了。
是否有 xmllint 的一些选项,以将其压制并打印出来?
谢谢!
在您的代码中,路径格式不正确。你还必须引用每个 xmlint arguments
@echo off
for /R %%a in (*.xml) do (
rem :: make a copy
copy "%%~a" "%%~dpna.old"
"%~dp0xmllint.exe" "%%~dpna.old">> "%%~a"
del "%%~dpna.old"
)