11

我有一个批处理脚本试图从蚁丘中执行以获取包含要编译的 plsql 的文件夹名称。

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% ***
)

这呼应 * PROCESSING FOLDER *

好像变量没有设置,在花了太长时间验证它之后我很确定这是真的

所以......我做错了什么?

4

1 回答 1

26

这本质上是今天早些时候提出的问题的重复。这是我对上述问题的回答......

您需要查看批处理文件的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在内部循环中使用变量,而不是创建新变量。

于 2012-09-20T18:09:03.307 回答