2015-10-14 3 views
0

У меня есть exe (xmllint.exe), чтобы довольно печатать некоторые XML-файлы в определенных подкаталогах. Xmllint.exe находится в моем maindirectory, где мой скрипт. Вот то, что я до сих порBatch Running .exe в подкаталогах

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 в подкаталогах, потому что он не может найти его.

+0

Замените 'xmllint.exe' на' 'путь \ to \ xmllint.exe''. Или, если 'xmllint.exe' существует в том же каталоге, что и пакетный, вы можете сделать' '% ~ dp0 \ xmllint.exe''. Или вы можете добавить каталог, содержащий 'xmllint.exe', в'% PATH% '. – rojo

+0

Спасибо! % ~ Dp0 было именно тем, что мне нужно! – user5417542

ответ

1

Что вы ищете в %~dp0 см call /? из for /?

Но я не понимаю, если переименовать файл перед xmlint, как вы будете иметь возможность использовать %%x в xmlint?

@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" 
) 

Edit, Измененное 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"

Сохраняя только один > он обновит файл вместо добавления в файл ,

Смежные вопросы