Board logo

标题: [其他] 批处理在for中使用标签循环出现错误 [打印本页]

作者: 踏沙行    时间: 2018-11-8 09:10     标题: 批处理在for中使用标签循环出现错误

已知,H:\2.txt中内容为:
  1.   " "Hello1 and hello2" "   
  2.       World1 and world2  
复制代码
bat代码如下
  1. @echo off
  2. Setlocal enabledelayedexpansion
  3. for /f "tokens=*" %%a in (H:\2.txt) do (
  4. echo,源1=%%a
  5. set "str=%%a"
  6. :Loop
  7. if "!str:~-1!"==" " (set "str=!str:~,-1!"&goto:loop)
  8. echo,源2=%%a
  9. echo,新=★!str!★
  10. )
复制代码
执行结果为:
  1. 源1=" "Hello1 and hello2" "
  2. 源2=%a
  3. 新=★" "Hello1 and hello2" "★
  4. 请按任意键继续. . .
复制代码
【问题】
1、参量%%a,在:loop语句后,结果被清空了,为什么?
2、H:\1.txt和第2句,为什么没有参与for循环?
作者: yhcfsr    时间: 2018-11-8 17:33

:loop中断了循环,从:loop开始到程序末尾(或者遇到goto:eof)都属于标签的解析范围.
不要循环内部使用标签,用call来调用外部标签
作者: Batcher    时间: 2018-11-8 19:32

不要尝试在for循环内部使用标签
作者: /zhqsystem/zhq    时间: 2018-11-8 23:11

for内只能这种循环
for .......(
call:1
)
pause
exit
:1
特别注意如果不必要最好不要带有暂停类和死循环类命令出现
if。。。。。goto:1
goto:eof
作者: 踏沙行    时间: 2018-11-9 08:57

回复 4# /zhqsystem/zhq
本来是不想在for内部使用标签的,这种方法远远没有call调用方便,但是call 调用在带参数时,如果参数中有不规范的引号,怎么传递结果都不理想。
请看原贴:
http://www.bathome.net/thread-51243-1-1.html
作者: /zhqsystem/zhq    时间: 2018-11-10 21:58

回复 5# 踏沙行
参数传递是固定的,可以设置N个假设截取对应的值示例:
for。。。。(
  set "返回数据="
  set 变量=1
  call:1 “!变量!”
  if not defined 返回数据 echo,调用出现错误变量为空值

pause
:1
if not defined 变量 set "返回数据="&&goto:eof
for。。。。。do 提取需要的数据
假设正确 set "返回数据=正确的结果"
goto:eof

都可以用变量进行判断对比,如果值不如意可以用for继续提取




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2