找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 29222|回复: 5

[其他] 批处理在for中使用标签循环出现错误

[复制链接]
发表于 2018-11-8 09:10:22 | 显示全部楼层 |阅读模式
已知,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循环?
发表于 2018-11-8 17:33:33 | 显示全部楼层
:loop中断了循环,从:loop开始到程序末尾(或者遇到goto:eof)都属于标签的解析范围.
不要循环内部使用标签,用call来调用外部标签
发表于 2018-11-8 19:32:41 | 显示全部楼层
不要尝试在for循环内部使用标签
发表于 2018-11-8 23:11:08 | 显示全部楼层
for内只能这种循环
for .......(
call:1
)
pause
exit
:1
特别注意如果不必要最好不要带有暂停类和死循环类命令出现
if。。。。。goto:1
goto:eof
 楼主| 发表于 2018-11-9 08:57:10 | 显示全部楼层
回复 4# /zhqsystem/zhq
本来是不想在for内部使用标签的,这种方法远远没有call调用方便,但是call 调用在带参数时,如果参数中有不规范的引号,怎么传递结果都不理想。
请看原贴:
http://www.bathome.net/thread-51243-1-1.html
发表于 2018-11-10 21:58:01 | 显示全部楼层
回复 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继续提取
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 22:27 , Processed in 0.018667 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表