曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 5025|回复: 0
打印 上一主题 下一主题

[语法] for 循环中转义管道符

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34397
跳转到指定楼层
楼主
发表于 2012-5-8 21:42:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
^ 符号为转义符号,即还原特殊符号为其原貌,使其不再具有特殊含义。

比如:
C:\Users\Administrator>route print | findstr "\<0.0.0.0\>"
 .0.0.0 .0.0.0192.168.1.1192.168.1.100 25
这里管道符 | 得到了正确的使用。

假如我们在上面的命令中给管道符前加一个 ^ 符号,那么命令就会出错了:
C:\Users\Administrator>route print ^| findstr "\<0.0.0.0\>"
route: 错误的参数 \<0.0.0.0\>

然而我们在看一个for循环的例子:

[Plain Text] 纯文本查看 复制代码
@echo off
for /F "tokens=3" %%i in ('route print | findstr "\<0.0.0.0\>"') do set "gw=%%i"

@echo %gw%

pause

这样返回出错了,其原因正好是出在管道符前缺少了一个 ^ 符号,为什么?

这是因为,如果这里在管道符前不使用 ^ 转义,那么解析器就会认为管道符前的 for /F "tokens=3" %%i in ('route print 这部分内容为“命令实体”,但是这是一条不完整的错误命令,因此执行出错了。如果对管道符进行转义,即写成 ^| ,那么解析器在第一遍解析时,不再认为原先管道符前的内容是一条指令;进而在第二遍解析时,认为括号之间的内容为“命令与管道之间的组合”,因此管道符此时得到了正确的解析。

最后,上面脚本中,gw 被括在两个 % 符号之间表示引用了一个名为 gw 的环境变量,而上头的 set 正是设置环境变量的一个命令。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-6-17 19:58 , Processed in 0.070300 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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