2012-09-20 183 views
7

我有一个批处理脚本试图执行了垤获取包含PLSQL文件夹名称进行编译。for循环批处理脚本将不设置可变

for /F %%a in ('dir /b D:\AHP_WorkDir\var\jobs\projects\rprt_test\rprt_test\plsql') do (
    set FOLDER=%%a 
    echo *** PROCESSING FOLDER %FOLDER% *** 
) 

这回声 *处理FOLDER *

仿佛变量没有得到设置,这点我敢肯定是验证它

所以花费的时间太长了后真...我究竟做错了什么?

+0

提示:搜寻'ENABLEDELAYEDEXPANSION' – adarshr

+2

有处理这个同样的问题很多很多很多现有的问题,他们都有一个类似的答案。答案可以在帮助系统中找到 - 从命令行输入“HELP FOR”或“FOR /?'。提示 - 寻找延迟扩展的讨论。 – dbenham

+0

@dbenham - :-)你死定了!如果我得到每这类问题的唯一一分... – jeb

回答

23

这基本上是一个question asked earlier today的副本。这里是我回答的问题...

你会想看看批处理文件的EnableDelayedExpansion选项。从前面提到的链接:

使用FOR循环时,延迟变量扩展通常很有用。通常,整个FOR循环将作为单个命令评估,即使它跨越批处理脚本的多行。

所以,你的脚本最终将看起来像这样:

@echo off 
setlocal enabledelayedexpansion 

for /F %%a in ('dir /b D:\AHP_WorkDir\var\jobs\projects\rprt_test\rprt_test\plsql') do (
    set FOLDER=%%a 
    echo *** PROCESSING FOLDER !FOLDER! *** 
) 

作为替代方案,只需使用%%a变量在你的内部循环,而不是创建一个新的变量。

+0

谢谢约拿!我认为这工作。我没有在我第一次使用enabledelayedexpansion ...因为我试图呼应值回看它是否被设置啊,我们在运行圈尝试呼应了! –

+0

很高兴帮助!如果有帮助,不要忘记将答案标记为已接受。这样,未来这个问题的访问者可以从您的经验中受益。 –

+0

会做。再次感谢。 –