Board logo

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

作者: lta3015    时间: 2011-6-6 00:15     标题: [已解决]如何区分批处理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的执行结果?

作者: batman    时间: 2011-6-6 00:43

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:代码要尽量书写规范。。。
作者: lta3015    时间: 2011-6-6 00:53

2# batman

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

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

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

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

期待ing~~~
作者: batman    时间: 2011-6-6 01:03

^的作用是用来转义的。。。
作者: Batcher    时间: 2011-6-7 10:25

3# lta3015


批处理for命令中的管道符为何要用尖号^进行转义?
http://bbs.bathome.net/viewthread.php?tid=1290&page=2#pid6306




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