使用XMLLINT.exe批量打印XML失败

时间:2015-10-16 07:14:15

标签: xml batch-file command-line format xmllint

我有许多带有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。)当我用单个文件测试它时,我注意到,一旦我有一个文件,有点损坏(例如错过了一个关闭标签),那么它也会给我一个错误,它可以&#39 ; t格式化,因为标签丢失。

是否有一些xmllint的选项,尽管如此还要压制它?

谢谢!

1 个答案:

答案 0 :(得分:1)

在您的代码中,路径格式不正确。您还必须引用每个xmlint参数

@echo off
for /R %%a in (*.xml) do (
    rem :: make a copy
    copy "%%~a" "%%~dpna.old"
    "%~dp0xmllint.exe" "%%~dpna.old">> "%%~a"
    del "%%~dpna.old"
)