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

[其他] bat脚本中到底怎么使用转义字符^

我看到这样一个代码:
  1. For /f skip^=2^ tokens^=2^ delims^=^" %%i in ('Reg Query "HKEY_CURRENT_USER\Software\Classes\Applications\WinRAR.exe\shell\open\command" /ve') do Set winrar=%%i
复制代码
问:
1.    for语句中怎么需要这么多的转义字符,连空格都需要吗?
2.    skip^=2^ tokens^=2^ delims^=^"这个怎么不可以用双引号引起吗?比如:"skip=2 tokens=2 delims=^""。
那转义字符到底在什么情况下才需要使用?

回复 9# aloha20200628


    这句好像那句“不要管为什么,你知道怎么用就行了”,但其实我发现我一直的做法都是与之相悖的,就是觉得要探究为什么,探究了为什么才能细致的用,或者模仿或者举一反三,虽然我们无法做到把这个“黑盒子”解剖,但我相信依然有前辈,产出各种猜想,用各种方法验证,以达到证实内部机理的目的。对于这样的前辈,我才是真正的佩服与我想说他们才具有真正的工匠精神。

TOP

回复 8# GNGW

如果cmd.exe有源码公开,玩c/c++的人也许可从中一览无余其中的奥秘...
也许有专业人士用反编译工具拆卸过cmd.exe,但绝大绝大绝大多数人不在其列,也不知道其所为...
商品化软件手册只给用法,不说机理,而常年未予实质性“呵护”的cmd.exe,很难说还有一整套完备详尽的用法手册???
所以,多年来用户和玩家只是将其作为一种“实验性技术工具”,在各地互联网平台互相交流分享探讨各自用法的“是非与成败”...
这条走了几十年凹凸不平的老路只有脚印和前人留下的路标... 没有why? 只有that it is...

TOP

回复 3# aloha20200628


    https://www.robvanderwoude.com/escapechars.php,实话说我没看懂这个帖子想表达什么,但是我看到了“在变量延迟开启的语块中,如下字符须用两个 ^ 前缀以免被转义
! 》^^!”。这是为什么?什么机制?为什么开启变量延迟扩展之后,需要用额外的^来转义^字符?

TOP

回复 6# qixiaobin0715
第3点感觉有画蛇添足的味道,可忽略。

TOP

根据个人使用的经验,补充一下findstr中的一般表达式特殊字符的转义问题:
1. ?不需要使用\来转义,和其它普通字符使用无区别;
2. 短横线-要用\转义;
3. 小于号和大于号使用时可以写在中括号内,[<]、[>]或[><]。
1

评分人数

    • 77七: 感谢分享技术 + 1

TOP

回复 2# Batcher


   非常感谢

TOP

回复 3# aloha20200628


    必须给个赞!!!

TOP


各种编程代码中均有一些语法保留字符,因而也就有所谓的相应“转义字符”的用法,批处理脚本亦然。
外网曾有人对此作过梳理(https://www.robvanderwoude.com/escapechars.php),可能有遗漏,在此编译给诸位仅供参考。

【小结:批处理脚本中的转义字符用法 — 也就是保全那些特殊字符本义(不被转义)的方法】

一。在各种场合,如下字符须用一个 % 前缀以免被转义
% 》%%

二。未被双引号包裹时,如下字符须用一个 ^ 前缀以免被转义
^ 》^^
& 》^&
< 》^<
> 》^>
|  》^|

三。在 for /f...() 的格式表达式和条件表达式中(即使后者已被双引号包裹),如下字符须用一个 ^ 前缀以免被转义
, 》^,
; 》^;
= 》^=
( 》^(
) 》^)

四。在 for /f...() 未用 usebackq 参数时的条件表达式中,如下字符须用一个 ^ 前缀以免被转义
' 》^'

五。在 for /f...() 采用 usebackq 参数时的条件表达式中,如下字符须用一个 ^ 前缀以免被转义
` 》^`

六。在变量延迟开启的语块中,如下字符须用两个 ^ 前缀以免被转义
! 》^^!

七。在 find.exe 的搜索表达式中,如下字符须用一个 " 前缀以免被转义
" 》""

八。在 findstr.exe 的正则匹配表达式中,如下字符须用一个 \ 前缀以免被转义
\ 》\\
[ 》\[
] 》\]
" 》\"
. 》\.
* 》\*
? 》\?
2

评分人数

TOP

回复 1# watson


这种写法主要是为了用双引号做列分隔符
http://bbs.bathome.net/thread-12395-1-1.html#pid79445

知道有这么一回事就行了,其它情况下正常使用即可。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表