我想循环浏览当前目录中的所有.h文件,并为相应的.cpp文件调用批处理功能。实际上我已经使它工作了,但是当我尝试使用局部变量时,我得到了一些奇怪的输出。
SETLOCAL
for /R %%f in (*.h) do (
SET header=%f%
ECHO header=%header%
SET source=%%~df%%~pf%%~nf.cpp
ECHO source=%source%
)
我得到以下输出:
SETLOCAL
C:\WorkingDirectory>(
SET header=
ECHO header=
SET source=C:\WorkingDirectory\SomeFile.cpp
ECHO source=
)
header=
source=
为什么可以%%~df%%~pf%%~nf.cpp
正确展开,但ECHO %source%
什么也不打印?我该如何正确SET header=%f%
?
1)所访问的变量不是用%f%
而是使用%%f
2)正如@npocmaka所提到的那样,它DelayedExpansion
是需要注释的,因为使用通常的批处理时,每个封闭括号的块都会被一次解析%
。要解决该问题,setlocal EnableDelayedExpansion
请在之后添加到脚本中,@echo off
然后更改%header%
为!header!
。这同样适用于%source%
,但不能因此对循环变量%%f
!
SETLOCAL EnableDelayedExpansion
for %%f in (*.h) do (
SET header=%%~ff
ECHO header=!header!
SET source=%%~df%%~pf%%~nf.cpp
ECHO source=!source!
)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句