for循环中的变量操作 [英] variable manipulation in a for loop

查看:217
本文介绍了for循环中的变量操作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以我的批处理代码应该一个接一个地打印一串数字。我的问题似乎是卡在第一个字母。我有(我相信)一个操作命令来删除字符串的第一个数字,但它似乎并没有工作。例如,如果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
设置ord =%1
echo%ord%
暂停

:循环
暂停$ b $ set var =%ord%
set char = %var:〜0,1%
set var =%var:〜1%
echo%char%
if NOT%var%== _ end goto loop
goto floop

:end


解决方案

:loop
pause
set var =%ord%$ b $ set char =%var:〜0,1%$ b $ set var =%var:〜 1%
echo%char%
if NOT%var%== _ end goto loop
goto floop

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



你正在设置 var ord 的值; char var 的第一个字符。 var 到第一个之后的其余部分;显示 char (第一个字符),然后从 ord 中循环回到设置 var code $ c

$ b $ $ $ $ $ $ $ $ $
:loop
pause
set char =%var:〜0,1%$ b $ set var =%var:〜1%
echo%char%
如果不是%var%== _ end goto loop
goto floop

这样可以解决这个问题。



但是您应该考虑如果 var 终止 _end 。最终, var 将变为空,而 cmd 会尝试解释行

  if NOT == _ end goto loop 

它会调用一个语法错误。

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

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



$ b $ p
$ b

然而,当 var 被修剪为 _end GOTO floop 将再次读取文件,从第一行开始,处理它,最终找到 var = _end ,返回到 floop ,呃 - 我们之前已经在这里了....一段时间后,cmd将用完因为处理你的文件会调用子程序,但是永远不会返回...


So my batch code is supposed to print out a string of numbers one by one. My problem is it seems to get stuck in the first letter. I have (I believe) an manipulation command to remove the first number of the string but it doesn't seem to work. If for example the info.txt would be 12345678 the :loop would get stuck in 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

解决方案

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

Your first problem is in this part^^

You are setting var to the value of ord; char to the first charater of var; var to the rest after the first; displaying char (the first character) and then looping back to setting var from ord...

: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

This should cure that problem.

but you should then consider what happens if var does not terminate _end. Eventually, var will become empty, and cmd will try to interpret the line

if NOT ==_end goto loop

which it will call a syntax error.

(you could fix this by coding

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

)

But then - what happens when var is trimmed down to _end? GOTO floop will read the file again, starting at the first line, processing it, eventually finding var=_end, back to floop, er - we've been here before.... After a while, cmd will run out of stack space because processing your file calls the subroutine, but never returns...

这篇关于for循环中的变量操作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆