【问题标题】:Nested for loops in Batch. An error has arisen, but unsure why在批处理中嵌套 for 循环。出现错误,但不确定原因
【发布时间】:2012-07-27 10:34:58
【问题描述】:

我的脚本从表单的“settings.txt”文件中调用信息

property1=value11,value12,...,value1n
属性 2=value21,value22,...,value2n
.
.
.
属性m=valuem1,valuem2,...,valuemn

为了向数据库添加“n”个模式,使用格式为“setup.txt”的文件

2
3
.
.
.
n+1

指定要添加的架构。遍历每个模式的“for”循环是

FOR /F %%T IN (setup.txt) DO ( 
    SET position=%%T        
    FOR /F "tokens=1,!position!, delims==," %%A IN (settings.txt) DO (
        IF "%%A"=="property1" (
            SET %%A="%%B"
        )
[The code then continues to go through capturing the rest of the variables, and
then executes the relevant SQL commands]

我从中得到的错误信息是

(此时出乎意料。

该脚本以前一次只使用一个模式(在我添加两个 for 循环之前),所以问题要么在于我如何设置 for 循环,要么与 for 循环和之前的一些冲突代码。我添加到之前工作脚本中的只是两个 FOR 语句和 SET 语句。

我已经让几个人看过它,但没有一个人能够找到问题所在。这里有什么想法吗?

谢谢

【问题讨论】:

    标签: batch-file for-loop nested-loops


    【解决方案1】:

    问题是线

    FOR /F "tokens=1,!position!, ...
    

    您不能在 FOR/f 选项中使用延迟扩展,因为 FOR 命令有它自己的解析器,它不能以这种方式扩展选项。

    但是你可以将它移动到一个函数中并使用百分比扩展

    FOR /F %%T IN (setup.txt) DO ( 
        call :myFunc %%T
    )
    :exit /b
    
    :myFunc
    FOR /F "tokens=1,%1, delims==," %%A IN (settings.txt) DO (
        IF "%%A"=="property1" (
            SET %%A="%%B"
        )
    )
    exit /b
    

    【讨论】:

    • 这就像一个魅力。谢谢。我对编码比较陌生,所以还没有遇到函数调用。我一定会检查出来的。再次感谢。
    猜你喜欢
    • 2011-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-18
    • 2016-08-04
    • 1970-01-01
    相关资源
    最近更新 更多