[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[其他] 批处理在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循环?

:loop中断了循环,从:loop开始到程序末尾(或者遇到goto:eof)都属于标签的解析范围.
不要循环内部使用标签,用call来调用外部标签
QQ 33892006

TOP

不要尝试在for循环内部使用标签
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

for内只能这种循环
for .......(
call:1
)
pause
exit
:1
特别注意如果不必要最好不要带有暂停类和死循环类命令出现
if。。。。。goto:1
goto:eof
这么好的论坛你上哪找,运行测试环境为6.1.7601-64
注:请遵守互联网信息安全,勿用于非法用途

TOP

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

TOP

回复 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继续提取
这么好的论坛你上哪找,运行测试环境为6.1.7601-64
注:请遵守互联网信息安全,勿用于非法用途

TOP

返回列表