echo 变量在批处理文件中不起作用

Posted

技术标签:

【中文标题】echo 变量在批处理文件中不起作用【英文标题】:echo variable is not working in batch file 【发布时间】:2015-11-29 04:03:39 【问题描述】:

我的批处理文件执行在 echo echo %outfvar% 处引发错误。以下是我写的批处理文件:

setlocal ENABLEDELAYEDEXPANSION
set /a incvar = 1
set outfvar = "outfile"_!incvar!".res"
echo !outfvar!
echo *.txt > !outfvar!
set /a incvar = incvar+1

FOR %%pat in (%*) do(
    FOR /F %%k in (!outfvar!) DO( grep -l !pat! !k! >>outfile_!incvar!.res)
    set /a incvar = incvar+1
    set outfvar = "outfile"_!incvar!.res
                     )

错误是“此时 %pat 出乎意料..” 谁能帮我成功执行这个批处理文件?

【问题讨论】:

编辑问题以便实施答案中的解决方案实际上不是一个好主意;想象一下其他用户正在查看帖子……;更好的方法是在您提出解决方案时提供答案... 我已经回滚了对问题的更改 - @Smij01 的目的是接受一个可以解决您的问题的答案 - 当它可用时使用绿色勾号,(请参阅帮助教程)。您可以提出另一个问题来解决不同的问题。 【参考方案1】:

删除 all set 命令中 = 周围的空格。

for 行中的do( 之间必须有一个空格。

线

set outfvar = "outfile"_%incvar%".res"

应该阅读

set "outfvar=outfile_%incvar%.res"

(您所说的引号是字符串值的一部分。)

for 变量必须仅由一个字母组成,并且需要在%%前加扩展。您正在尝试在代码中使用 %%pat,但这是行不通的。改为状态%%p(也是内部for)。

最后,您需要延迟扩展才能读取您在同一(复合)命令中修改的变量,即代码中的for。请参阅 this post 了解其工作原理。

【讨论】:

也需要延迟扩展 @aschipfl:我已经删除了 = 周围的空格,并在 do 和 ( 按照您的指示添加了空格。现在我收到另一个错误:此时 %pat 是意外的。 @aschipfl:我已经使用延迟扩展进行了更改。但我仍然收到“%pat 在这个时候出乎意料。” 您正在尝试使用%%pat 作为for 的变量——正如我在回答中提到的那样......顺便说一句,您应该在do 和@ 之间插入一个空格987654338@for 两行... 那我应该如何改正呢?我是批处理程序的新手,所以如果我的怀疑看起来很愚蠢,请不要介意。

以上是关于echo 变量在批处理文件中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

条件For循环在批处理文件中不起作用

数据库查询在批处理文件中不起作用

使用 if 语句后跟调用似乎在批处理文件中不起作用

为什么用户的输入值在批处理文件中的代码中不起作用? [重复]

如果不存在在 Windows 批处理中不起作用

env 参数在 system2 中不起作用?