所以我有一个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,因为它无法找到它。
答案 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"
只保留一个>
,它将重新创建文件,而不是附加到文件。