标题: [文本处理] [已解决]如何区分批处理for命令两种实现形式的区别? [打印本页]
作者: lta3015 时间: 2011-6-6 00:15 标题: [已解决]如何区分批处理for命令两种实现形式的区别?
本帖最后由 lta3015 于 2011-6-7 10:09 编辑
各位好!
今天在尝试使用for语句时,发现两种实现形式输出差别很大,
求高手解释,
多谢~~~
代码1:- @echo off
- setlocal enabledelayedexpansion
-
- set DEVICE=EP3SE80
- type 1.txt | for /f "tokens=2" %%a in ('findstr "EP[0-9]S*" ') do (
- if %%a == %DEVICE% (
- set device_name=%%a
- echo !device_name!
- goto :FOUND
- )
- )
-
- echo NOT OK
- goto :P_END
-
- :FOUND
- echo OK
-
- :P_END
- pause
复制代码
运行结果(错误):
(if EP3SE80 == EP3SE80 ( set device_name=EP3SE80 & echo !device_name! & goto :FOUND
) )
!device_name!
NOT OK
代码2与代码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、代码修改如下:- @echo off
- setlocal enabledelayedexpansion
- set DEVICE=EP3SE80
- for /f "tokens=2" %%a in ('type 1.txt^|findstr "EP[0-9]S*"') do (
- if %%a == %DEVICE% (
- set device_name=%%a
- echo !device_name!
- goto :FOUND
- )
- )
- echo NOT OK
- goto :P_END
- :FOUND
- echo OK
- :P_END
- pause
复制代码
ps:代码要尽量书写规范。。。
作者: lta3015 时间: 2011-6-6 00:53
2# batman
非常感谢!
斑竹真是超级敬业啊,
这么晚了还没休息,
赞一个!
原本我想使用这个语句,- 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://bathome.net./) |
Powered by Discuz! 7.2 |