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

[特效代码] [已解决]批处理reg add命令参数后跟带空格的路径时之奇怪现象

win7 企业版
  1. @echo off
  2. ::reg add "HKEY_LOCAL_MACHINE\SOFTWARE\hello" /v world /t reg_sz /d "c:\hello world\" /f
  3. ::c:\hello world" /f
  4. ::echo y | reg add "HKEY_LOCAL_MACHINE\SOFTWARE\hello" /v world /t reg_sz /d "c:\hello world\"
  5. ::c:\hello world"
  6. ::echo y | reg add "HKEY_LOCAL_MACHINE\SOFTWARE\hello" /v world /t reg_sz /d c:\hello world\
  7. ::错误: 无效语法。
  8. ::键入 "REG ADD /?" 了解用法信息。
  9. ::echo y | reg add "HKEY_LOCAL_MACHINE\SOFTWARE\hello" /v world /t reg_sz /d "c:\hello world\
  10. ::c:\hello world\
  11. pause>nul
复制代码
每条执行代码后面跟的都是修改注册表的结果。

这里有几个现象很奇怪:
1.用引号 加 /f 参数时,world后面的 \ 消失了,/f参数似乎被什么转义了
2.单纯用引号的时候,\ 依旧是消失的,引号反而跟了——难道 \ 转义了"   ?
3.一个引号时反而实现了我本意,一个引号转义空格?
1

评分人数

    • zm900612: 感谢给帖子标题标注[已解决]字样PB + 2

  1. reg add "HKEY_LOCAL_MACHINE\SOFTWARE\hello" /v world /t reg_sz /d "c:\hello world\\" /f
复制代码
1

评分人数

我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 applba 于 2011-6-8 02:49 编辑

单个引号可以转义其后的所有内容,直到遇到下一个配对的引号,如果没有遇到,转义作用会持续到逻辑行的结束。
1

评分人数

TOP

本帖最后由 applba 于 2011-6-8 03:06 编辑

反斜杠在这里作为转义符号,可以转义\ "和分隔符等。\消失的原因在于它转义了其后的参数分隔符空格

比如要添加这个键值:
"d:\Program Files\Tencent\QQPCMgr\5.0.1407.201\QQPCTray.exe" /regrun
由于路径部分带了空格所以必须要用引号, /regrun参数之前又有空格,添加键值的的时候还要继续使用一层引号。

""d:\Program Files\Tencent\QQPCMgr\5.0.1407.201\QQPCTray.exe" /regrun"
这样添加肯定会出错的^,开头的两个引号被错误配对,后面的两个引号又会被错误配对。

你必须使用\来转义内层的引号,正确的用法如下:
  1. reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v " QQPCTray2" /d "\"d:\\Program Files\\Tencent\\QQPCMgr\\5.0.1407.201\\QQPCTray.exe\" /regrun" /f
复制代码
论坛怎么了,tab发上来就都成了??
1

评分人数

TOP

4# applba


DZ论坛会把tab转换成空格
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

  1. ::摘自《BatMPlayer 2011 Beta V3.28.5.15》,五修改。
  2. ::%##%表示你的文件路径,已经包含引号,可以使用带有空格的路径。
  3. reg add HKCR\AudioCD\shell\open\command /t REG_SZ /ve /f /d "\"%##%\" %%1 %%*
  4. reg add HKCR\AudioCD\shell\PlayList /t REG_SZ /ve /f /d 添加到BatMPlayer播放列表
复制代码

你是幸运的,以前可没有人回答这个问题!~
1

评分人数

寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

按照诸位的说法,\是可以作为转义字符了。

TOP

"也是作为转义字符——以前只是知道要为有空格的路径加上双引号,现在知道为什么要加上了。

TOP

很多编程语言都把\作为转义符号……
但是cmd.exe本身是不支持这个转义符号的……
只是那些外部命令如reg自己对\进行了解析……

TOP

7# Hello123World


不是“可以”,而是“本来就是”^_^
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

原来\作为转义字符是来源正则表达式

TOP

11# Hello123World


其实并非来源于哪里,关键是解释器/编译器要规定一些特殊字符的特殊用法,以便在解释/编译的时候能够正确区分。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 Hello123World 于 2011-6-11 19:54 编辑

12# Batcher
  1. reg add "HKEY_LOCAL_MACHINE\SOFTWARE\hello" /v world /t reg_sz /d "c:\hello world\\" /f
复制代码
我仔细想想,还有个问题,如果\是转义字符的话,为什么
c:\hello world\\ ,hello前面的\没有消失?
echo ^hello 显示的结果是hello——^消失了。——这说明转义过程中即便是不需要转义的符号,还是会得到转义(致使转义字符消失),那么为什么hello前面的\没有消失?

TOP

本帖最后由 tiandyoin 于 2023-9-28 00:46 编辑

回复 13# Hello123World


    1.与双引号相连前面的连续个 \ 都需要转义,使用 \\ 表示 \,使用 \" 表示 ",也可以使用 "" 表示 "。如 \\" 转义为 \\\\\"
    2.为避免最后一串连续的 \ 与在外层加的双引号起作用, 最后一串连续的 \ 也要转义为 \\ 。如 s=a\\, 调用 "%s%" 时,s 要转成 a\\\\
    3.除此之外的 \ 不需要转义。

但这里有一个问题,我不知道怎么转义末尾的空格,如
  1. reg add "HKEY_CURRENT_USER\1" /v "mouse \\\\\" " /d "mouse \\\\"" without \ Borders\\\\"  /t "REG_SZ" /f
复制代码
这里要添加一个注册表值为 【mouse \\" 】,如果使用 \" 转义双引号, 则【"mouse \\\\\" "】一共三个双引号,无法配对。
如果使用 "" 转义双引号, 【"mouse \\\\"" "】,一共四个双引号,配对正确。但是添加到注册表后,末尾的空格还是丢失了,变成了【mouse \\"】
试了很多转义方法均不能保留空格。

TOP

TOP

返回列表