在子目录中批处理运行.exe

时间:2015-10-14 13:38:44

标签: xml windows batch-file format command

所以我有一个exe(xmllint.exe)来打印特定子目录中的一些XML文件。 xmllint.exe位于我的maindirectory中,我的脚本在那里。这是我到目前为止所拥有的

setlocal enabledelayedexpansion

for /D /r %%d in (./*targetfolder) do (
    pushd %%d
    for %%x in (*.xml) do (
        ::Get the filename, without the .old-extension
        set "filename=%%~nx"
        set "extension=.xml"

        ren %%x %%~x.old

        ::Concatenate filename and extension
        set "finalname=!filename!!extension!"
        xmllint.exe %%x >> !finalname!

        del %%~x.old
    )
    popd
)

但当然它不会在子目录中运行xmllint.exe,因为它无法找到它。

1 个答案:

答案 0 :(得分:1)

您所看到的是%~dp0,请参阅call /?

for /?

但我没有得到它,如果你在xmlint之前重命名文件,你将如何在xmlint中使用%%x

@echo off
setlocal enabledelayedexpansion

rem :: set the target folder first with:
set "targetfolder=c:\path\of\target"

for /D /r %%a in (%targetfolder%\*.xml) do (

    rem :: make a copy
    copy "%%~a" "%%~dpna.old"

    "%~dp0\xmllint.exe" "%%~dpna.old">> "%%~a"

    del "%%~dpna.old"
)

编辑,已更改FOR /R现在应该可以使用。

@echo off
rem :: set the target folder first with:
set "targetfolder=c:\path\of\target"
for /R %targetfolder% %%a in (*.xml) do (
    rem :: make a copy
    copy "%%~a" "%%~dpna.old"
    "%~dp0xmllint.exe" "%%~dpna.old">> "%%~a"
    del "%%~dpna.old"
)

重要提示:您必须更改以下行:

"%~dp0xmllint.exe" "%%~dpna.old">> "%%~a"

"%~dp0xmllint.exe" "%%~dpna.old"> "%%~a"

只保留一个>,它将重新创建文件,而不是附加到文件。