【问题标题】:variable manipulation in a for loopfor循环中的变量操作
【发布时间】:2014-06-12 19:44:21
【问题描述】:

所以我的批处理代码应该一个一个地打印出一串数字。我的问题是它似乎卡在第一个字母中。我有(我相信)一个操作命令来删除字符串的第一个数字,但它似乎不起作用。例如,如果 info.txt 为 12345678,则 :loop 会卡在 1 中。

:floop
for /F %%G IN ('TYPE info.txt') DO call :line1 %%G
goto :end

:line1
set /a cnt+=1
set /a div=%cnt% %% 2
if %div% == 0 call :line2 %1
goto :EOF

:line2
set ord=%1
echo %ord%
pause

:loop
pause
set var=%ord%
set char=%var:~0,1%
set var=%var:~1%
echo %char%
if NOT %var%==_end goto loop
goto floop

:end

【问题讨论】:

  • 查看延迟环境变量扩展的 Set 命令帮助。要实际使用它,请参阅 setlocal 命令。

标签: loops variables batch-file for-loop


【解决方案1】:

作为phd443322 cmets,需要调查setlocal enabledelayedexpansion
help set 稍微深入一点。

我还在这里找到了一篇 msdn 博客文章,详细介绍了这一点:msdn blog post (Raymond Chen ?)

这是我根据您最初的问题陈述开始工作的示例:

@echo off
setlocal enabledelayedexpansion
:floop

for /F %%G IN ('TYPE info.txt') DO call :line1 %%G
goto :end

:line1
        set ord=%1
        echo %ord%
        set var=%ord%
:loop
    pause
    set char=!var:~0,1!
    set var=!var:~1!
    echo !char!
    if [!var!] == [] goto :end
goto loop
:end 

【讨论】:

    【解决方案2】:
    :loop
    pause
    set var=%ord%
    set char=%var:~0,1%
    set var=%var:~1%
    echo %char%
    if NOT %var%==_end goto loop
    goto floop
    

    你的第一个问题在这部分^^

    您将var 设置为ord 的值; charvar 的第一个字符; var给其余的先;显示char(第一个字符),然后从ord循环回到设置var...

    :OLD_loop
    pause
    set var=%ord%
    :loop
    pause
    set char=%var:~0,1%
    set var=%var:~1%
    echo %char%
    if NOT %var%==_end goto loop
    goto floop
    

    这应该可以解决这个问题。

    但是你应该考虑如果var终止_end会发生什么。最终,var 将变为空,cmd 将尝试解释该行

    if NOT ==_end goto loop
    

    它将调用语法错误。

    (你可以通过编码来解决这个问题

    :OLD_loop
    pause
    set var=%ord%_end
    :loop
    

    )

    但是,当var 被缩减为_end 时会发生什么? GOTO floop 将再次读取文件,从第一行开始,处理它,最终找到var=_end,回到floop,呃 - 我们以前来过这里......过了一会儿, cmd 将耗尽堆栈空间,因为处理您的文件会调用子例程,但永远不会返回...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-24
      • 1970-01-01
      • 1970-01-01
      • 2017-06-20
      • 2019-09-27
      • 1970-01-01
      • 2017-03-22
      相关资源
      最近更新 更多