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 变量在批处理文件中不起作用的主要内容,如果未能解决你的问题,请参考以下文章