2

我想在一个可能很简单的情况下寻求您的帮助(解决方案对我来说还未知)。

我正在尝试为 if 命令提供一个变量,以使代码更加“动态”,但这对我来说失败了:此时 % 是意外的。

这是一个简单的例子:

> for %i in (NEQ) do (if 1 %i 2 echo jo)
%i was unexpected at this time.

虽然以下工作就像魅力:

>set oper=NEQ
>for %i in (NEQ) do (if 1 %oper% 2 echo works)
works

因为我应该留在 for 循环中(并且我从实际代码中的 for 循环中获取实际的运算符),所以我真的很困惑如何解决它......

也尝试使用 EnableDelayedExpansion,但是!变量!而不是运营商也被拒绝。有没有办法在 IF 的 FOR 循环中提交变量,而无需对脚本进行重大修改?

4

1 回答 1

3

有没有办法在 IF 的 FOR 循环中提交变量?

不!因为,该IF语句有它自己的解析器,并且它期望在这个解析阶段已经扩展了一些标记。
因此,既不能扩展选项,也不能扩展运算符,也不能扩展NOT.
但允许使用延迟或 FOR 变量扩展值。

setlocal EnableDelayedExpansion
set myOperator=EQU
IF 1 %myOperator% 1 echo Works
IF 1 !myOperator! 1 echo FAILS
for %%O in (EQU) do IF 1 %%O 1 echo Works

百分比扩展有效,因为它在IF解析器获取行之前被扩展。

如果你真的需要使用变量运算符,那么你需要使用一个函数。

for %%O in (EQU) do call :myFunc %%O
exit /b

:myFunc 
IF ONE %1 ONE echo Works
exit /b

编辑:
特殊解析器也是原因,这里不可能使用语句的CALL扩展。IF

喜欢这个想法

set myOperator=EQU
CALL IF 1 %%myOperator%% 1 echo Works

这应该扩展到IF 1 EQU 1 echo Works,但 和 的组合CALL总是IF失败。

于 2013-02-04T13:53:10.020 回答