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

[文本处理] [已解决]如何区分批处理for命令两种实现形式的区别?

本帖最后由 lta3015 于 2011-6-7 10:09 编辑

各位好!
今天在尝试使用for语句时,发现两种实现形式输出差别很大,
求高手解释,
多谢~~~

代码1:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set DEVICE=EP3SE80
  4. type 1.txt | for /f "tokens=2" %%a in ('findstr "EP[0-9]S*" ')  do (
  5. if %%a == %DEVICE% (
  6. set device_name=%%a
  7. echo !device_name!
  8. goto :FOUND
  9. )
  10. )
  11. echo NOT OK
  12. goto :P_END
  13. :FOUND
  14. echo OK
  15. :P_END
  16. pause
复制代码
运行结果(错误):
(if EP3SE80 == EP3SE80 ( set device_name=EP3SE80 & echo  !device_name! & goto :FOUND
) )
!device_name!
NOT OK


代码2与代码1唯一区别:
  1. for /f "tokens=2" %%a in ('findstr "EP[0-9]S*" 1.txt')
复制代码
运行结果(正确):
EP3SE80
OK

1.txt里面的内容:
124        254        36SD
ASD        EP3SE80        1SAD
CDDF        SF4        ASF

我的问题:
1.两种代码的执行方式的差别在哪里呢?为什么代码1明明能够正确获取指定字符串,可是判断语句无法正确执行?
2.为什么代码1执行后回显示命令语句呢,我已经在代码初始位置处设置了@echo off?如何避免回显?
3.如何采用代码1的方式得到代码2的执行结果?
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

3# lta3015


批处理for命令中的管道符为何要用尖号^进行转义?
http://bbs.bathome.net/viewthread.php?tid=1290&page=2#pid6306
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

^的作用是用来转义的。。。
***共同提高***

TOP

2# batman

非常感谢!
斑竹真是超级敬业啊,
这么晚了还没休息,
赞一个!

原本我想使用这个语句,
  1. for /f "tokens=2" %%a in ('type 1.txt|findstr "EP[0-9]S*"')
复制代码
但是执行时无法通过,
于是只好尝试它法。

为什么上述代码1执行时并不提示错误呢?
只是结果输出明显有问题~~~

今天上午这个问题困扰了我很久,
因为代码2的方式不能用(我需要的是命令执行后的结果中寻找需要的信息<不想将其写入文件中>,而不是文件中),
又不熟悉其它用法。
斑竹能否解释一下在该语句中 | 和 ^| 的区别呢?

期待ing~~~

TOP

1、代码1的语法根本就是错误的。。。

2、同上。。。

3、代码修改如下:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set DEVICE=EP3SE80
  4. for /f "tokens=2" %%a in ('type 1.txt^|findstr "EP[0-9]S*"') do (
  5.   if %%a == %DEVICE% (
  6.     set device_name=%%a
  7.     echo !device_name!
  8.     goto :FOUND
  9.   )
  10. )        
  11. echo NOT OK
  12. goto :P_END
  13. :FOUND
  14. echo OK
  15. :P_END
  16. pause
复制代码
ps:代码要尽量书写规范。。。
1

评分人数

***共同提高***

TOP

返回列表