for-loop - 批处理,如何执行存储在变量或txt文件中的代码?

标签 for-loop if-statement batch-file variables cmd

如何执行保存在变量中的代码?我正在尝试执行已保存在另一个文件中的 if 语句(该文件必须保留为文本文件)。有关如何仅从变量执行 if 语句的线索可能会有所帮助,因为我认为问题是它无法读取 %%s

文本文件包含:

if %var%==0301 (echo Yay) 

批处理文件包含:

for /f "tokens=*" %%s in (code.file) do (
%%s
)

这通常通过将 code.file 中的所有内容设置为变量 %%s 来执行 code.file 中的代码,然后执行变量。

结果是这样的:'if'不被识别为内部或外部命令、可操作程序或批处理文件。

此方法适用于执行 echoset,但我需要它适用于 if

最佳答案

IF 仅在阶段 2 中被解析器检测到,但 %%s 将在稍后阶段扩展。

您需要使用百分比扩展,如本示例所示

for /f "tokens=*" %%s in (code.file) do (
  set "line=%%s"
  call :executer
)
exit /b

:executer
%line%
exit /b

但是对于您的示例:if %var%==0301 (echo Yay)
它永远不会说 Yay,因为 %var% 永远不会被扩展。

这是因为%line%已经是百分比扩展,它不会递归地工作。

这可以通过将 code.file 中的文本更改为来解决 如果!var! == 0301(回声耶)
这是可行的,因为延迟扩展发生在百分比扩展之后

或者一个更简单的解决方案:

copy code.file tmp.bat
call tmp.bat
del tmp.bat

关于for-loop - 批处理,如何执行存储在变量或txt文件中的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73378983/

相关文章:

java - System.out.println() 在 for 循环中无法正常工作

if-statement - 如何根据 Robot 中的 IF/ELSE 条件为变量赋值?

swift - Bool 未正确返回

windows - Windows 中的 Netcat Web 服务器

javascript - 循环返回两个数组

java - 如何使用增强的 for 循环初始化数组?

python - for循环在一些处理后显示和写入一堆图像

c - 如何避免 if 上出现 "constant expression"?

windows - 当批处理系列中没有负面导出时,TFS 构建流程中的批处理如何以 -1 退出

batch-file - 批处理 : preventing someone from using CTRL c or CTRL BREAK to bypass my password script