我看到这样一个代码:
- 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=^""。
那转义字符到底在什么情况下才需要使用?
|
各种编程代码中均有一些语法保留字符,因而也就有所谓的相应“转义字符”的用法,批处理脚本亦然。
外网曾有人对此作过梳理(
https://www.robvanderwoude.com/escapechars.php
),可能有遗漏,在此编译给诸位仅供参考。
【小结:批处理脚本中的转义字符用法 — 也就是保全那些特殊字符本义(不被转义)的方法】
一。在各种场合,如下字符须用一个 % 前缀以免被转义
% 》%%
二。未被双引号包裹时,如下字符须用一个 ^ 前缀以免被转义
^ 》^^
| 》^|
三。在 for /f...() 的格式表达式和条件表达式中(即使后者已被双引号包裹),如下字符须用一个 ^ 前缀以免被转义
, 》^,
; 》^;
= 》^=
( 》^(
) 》^)
四。在 for /f...() 未用 usebackq 参数时的条件表达式中,如下字符须用一个 ^ 前缀以免被转义
' 》^'
五。在 for /f...() 采用 usebackq 参数时的条件表达式中,如下字符须用一个 ^ 前缀以免被转义
` 》^`
六。在变量延迟开启的语块中,如下字符须用两个 ^ 前缀以免被转义
! 》^^!
七。在 find.exe 的搜索表达式中,如下字符须用一个 " 前缀以免被转义
" 》""
八。在 findstr.exe 的正则匹配表达式中,如下字符须用一个 \ 前缀以免被转义
\ 》\\
[ 》\[
] 》\]
" 》\"
. 》\.
* 》\*
? 》\?
https://www.robvanderwoude.com/escapechars.php
,实话说我没看懂这个帖子想表达什么,但是我看到了“在变量延迟开启的语块中,如下字符须用两个 ^ 前缀以免被转义
! 》^^!”。这是为什么?什么机制?为什么开启变量延迟扩展之后,需要用额外的^来转义^字符?
如果cmd.exe有源码公开,玩c/c++的人也许可从中一览无余其中的奥秘...
也许有专业人士用反编译工具拆卸过cmd.exe,但绝大绝大绝大多数人不在其列,也不知道其所为...
商品化软件手册只给用法,不说机理,而常年未予实质性“呵护”的cmd.exe,很难说还有一整套完备详尽的用法手册???
所以,多年来用户和玩家只是将其作为一种“实验性技术工具”,在各地互联网平台互相交流分享探讨各自用法的“是非与成败”...
这条走了几十年凹凸不平的老路只有脚印和前人留下的路标... 没有why? 只有that it is...
-
批处理专区: BAT CMD DOS
-
-
其他脚本区
-
-
网络资源区
-
-
论坛事务区
-
[收藏此主题]
[关注此主题的新回复]