windows - Windows CMD - 作为数组变量值的代码语句不适用于 IF 命令
问题描述
我想在 Windows 命令中创建一个自动化测试数组,使用单个代码语句作为每个测试数组记录的 VALUE。下面是 $code_test[xx] 数组中前两条记录的数组定义:
set $code_test[00]=if 5 lss 10 (echo IT WORKED)
set $code_test[01]=if 5 lss 10 (echo BUG OFF)
我想使用这样的for /l
循环执行每个 $code_test[xx] 数组记录(这是一个测试代码语句)的 VALUE:
for /l %%g in (0,1,1) do (
echo $code_test[0%%g]
!$code_test[0%%g]!
echo.
)
完整的代码是:
@echo off
setlocal enabledelayedexpansion
set $code_test[00]=if 5 lss 10 (echo IT WORKED)
set $code_test[01]=if 5 lss 10 (echo BUG OFF)
for /l %%g in (0,1,1) do (
echo $code_test[0%%g]
!$code_test[0%%g]!
echo.
)
echo.
pause
当我执行完整的代码时,我在执行代码行时收到以下错误消息!$code_test[0%%g]!
:
'if' 不是内部或外部命令、可运行程序或批处理文件
我在这里阅读了关于如何解析 IF 命令的优秀文章,但我没有看到任何关于我的代码失败的原因。甚至有可能做我想要完成的事情吗?
任何帮助表示赞赏!
更新:set
当我在代码行中使用命令
时,我发现@sst 是正确set $code_test[01]=if 5 lss 10 (set /a $var1+=1)
的:
@echo off
setlocal enabledelayedexpansion
set $var1=0
set $code_test[00]=if 5 lss 10 (echo IT WORKED)
set $code_test[01]=if 5 lss 10 (set /a $var1+=1)
for /l %%g in (0,1,1) do (
echo $code_test[0%%g]
cmd /c !$code_test[0%%g]!
echo $var1 = !$var1!
echo.
)
echo.
pause
该set /a $var1+=1
命令没有按预期增加 $var1 的值。事实上,当代码行echo $var1 = !$var1!
执行时,它会在 $var1 标签前面放置一个“1”。我还没有尝试过@Magoo 提供的解决方案。我真的很想使用cmd /c
解决方案而不是调用子程序。我可以做些什么来使该set
命令与该cmd /c
选项一起使用吗?
解决方案
它无法按照您尝试的方式工作,因为在第 2 阶段检测并处理了 IF 命令。
但是延迟扩展为时已晚。
此问题仅发生在命令 IF、FOR 和 REM。
'CALL %%$code_test%%' 在许多情况下都有效,但对于三个命令和代码块也失败了。
目前尚不清楚为什么在这种情况下它会失败,因为命令在第 2 阶段被解析但它们未被识别。
@stephan 的解决方案使用一个新的 cmd 实例,它的缺点是每次 cmd 实例完成时都会丢失所有变量修改。
因此,@Magoo 的解决方案使用了百分比扩展,这几乎在所有情况下都可以正常工作。
推荐阅读
- checksum - 如何计算两个CRC32的CRC32?
- python - 将表解析为 csv Python
- typescript - 使用打字稿的firebase功能组织
- android - 如何使用 Xamarin Forms 为外部应用程序指定完整的 android 包名称?
- css - 如何防止vue包样式应用到父页面
- jquery - jquery Timepicker在两个或更多按钮单击后不起作用
- c - 在链接静态库时编译 CUDA 代码
- typescript - Angular Highcharts 不呈现 3d 视图(来自 highcharts 包)
- typescript - Typescript :: 条件链接函数
- php - 将日期时间插入url以获取curl php google calendar api