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

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

[复制链接]
发表于 2011-6-6 00:15:17 | 显示全部楼层 |阅读模式
本帖最后由 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的执行结果?

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2011-6-6 00:43:16 | 显示全部楼层
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技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2011-6-6 00:53:56 | 显示全部楼层
2# batman

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

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

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

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

期待ing~~~
发表于 2011-6-6 01:03:43 | 显示全部楼层
^的作用是用来转义的。。。
发表于 2011-6-7 10:25:03 | 显示全部楼层
3# lta3015


批处理for命令中的管道符为何要用尖号^进行转义?
http://bbs.bathome.net/viewthread.php?tid=1290&page=2#pid6306
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 14:11 , Processed in 0.020413 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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