gpt4 book ai didi

batch-file - 批;使用 for 在变量内运行命令

转载 作者:行者123 更新时间:2023-12-04 01:21:04 25 4
gpt4 key购买 nike

所以我在批处理文件中有一些从文本文件中存储的变量

(
set /p var1=
set /p var2=
set /p var3=
)<oi.txt

它们代表一个 if 语句。

如果我要运行 %var1% 它会运行 if 语句,但是当我运行时
for /l %%i in (1,1,3) do !var%%i!

(在 setlocal enabledelayedexpansion 中)它运行 if,但是它返回
`if` is not recognized as an internal or external command
`if` is not recognized as an internal or external command
`if` is not recognized as an internal or external command

这是微软的疏忽吗?或者可能以没有此选项的代价修复另一个错误?

*编辑这与 for 命令无关,使用 !var%number%! var1 包含 if 语句,返回相同的问题。
(另外,我 100% 确定 var 中的 if 语句是正确的,为什么即使它是错误的也不会被识别?)

最佳答案

当您执行存储在环境变量中的命令时,这通常称为宏。 Very complicated macros可以使用 %macro% 创建和执行.但是执行 !macro! via延迟扩张严重瘫痪——有很多限制。

cmd.exe 命令(和批处理)解析器是一个复杂的野兽。我不知道有任何官方文件可以解释这种行为。

但是有一个set of parsing phase rules developed by jeb这有助于解释为什么延迟扩展宏执行不适用于 IF 或 FOR 语句。

IF 和 FOR 都需要在第 2 阶段发生的特殊解析。但延迟扩展直到第 5 阶段才会发生。因此,当您尝试通过延迟扩展执行命令时,所需的 IF 和 FOR 解析永远不会发生。

没有解决办法。如果要在环境变量“宏”中包含 FOR 或 IF,则必须使用正常的 %macro% 执行宏。扩张。

解释与为什么不能对 FOR 或 IF 选项或标志使用延迟扩展的解释基本相同。

这是一个 IF 示例:

@echo off
setlocal enableDelayedExpansion
set "ifFlag=/I"

:: This works
if %ifFlag% a==A echo match

:: This does not work
if !ifFlag! a==A echo match

这是一个例如:
@echo off
setlocal enableDelayedExpansion
set "forOptions=delims=: tokens=1,2"

:: This works
for /f "%forOptions%" %%A in ("1:2") do echo A=%%A B=%%B

:: This does NOT works
for /f "!forOptions!" %%A in ("1:2") do echo A=%%A B=%%B

关于batch-file - 批;使用 for 在变量内运行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45075971/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com