【问题标题】:Windows Batch File can't use variable in for syntaxWindows 批处理文件不能在语法中使用变量
【发布时间】:2015-08-09 10:30:45
【问题描述】:

我想在 for 循环中使用一个可变的跳过参数,但它不允许我这样做。 这是我的代码

@echo off
setlocal ENABLEDELAYEDEXPANSION

set /p testcase=<testcases.txt
set /a end=%testcase%*13

for /L %%P IN (1,13,%end%) DO (

    set skip=skip=%%P
    echo !skip!
    set vidx=0

    for /f "%skip%" %%A in (testcases.txt) do (
        set /a vidx=!vidx! + 1
        set var!vidx!=%%A
    )
)

这里的skip 是skip=1,但它不会跳过任何一行。当我用skip = 1替换它时。那么它工作正常,但我想跳过变量号。每次迭代中的行数。请帮忙。

【问题讨论】:

  • 这是错字吗:应该是"!skip!" 而不是"%skip%"
  • 也尝试过使用它,它说“!skip!”当时出乎意料。”

标签: windows batch-file for-loop


【解决方案1】:

我认为按照这种逻辑,唯一的选择是子程序:

@echo off
setlocal ENABLEDELAYEDEXPANSION

set /p testcase=<testcases.txt
set /a end=%testcase%*13

for /L %%P IN (1,13,%end%) DO (

    set skip=skip=%%P
    echo !skip!
    set vidx=0
    call :innerFor %%P

)

exit /b 0

:innerFor
    for /f "skip=%~1" %%A in (testcases.txt) do (
        set /a vidx=!vidx! + 1
        set var!vidx!=%%A
    )
 exit /b 0

FOR /F 选项的参数化有点棘手。 虽然我没有你的文件内容,但我无法测试它是否正常工作。

【讨论】:

  • 文件很简单。第一行包含一个整数 T 即编号。的测试用例。 T 测试用例如下。每个测试用例有 13 行,每行包含一个整数。
  • @DarkNemesis - 这是因为FOR /F 如何解析它的选项。1) 参数/标记总是 (%%A) 总是在延迟扩展变量之后扩展。2) 当 FOR在批处理文件中遇到%%,它将它用于参数/令牌定义,其优先级高于选项 - 这会破坏命令。看起来命令行参数在 FOR 标记之前扩展,因此它可以使用子例程。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-27
  • 2014-03-03
  • 1970-01-01
  • 2011-07-07
相关资源
最近更新 更多