reg
我尝试通过 cmd 添加的命令似乎有问题。有什么想法可以修复此语法错误吗?因为命令似乎没有错...
reg add HKEY_CLASSES_ROOT\Excel.Sheet.12\shell\Open\command /v command /t REG_MULTI_SZ /d xb'BV5!!!!!!!!!MKKSkEXCELFiles>VijqBof(Y8'w!FId1gLQ /dde /p "C:\Program Files (x86)\Microsoft Office\Office14\EXCEL.EXE" /e "%1"
我需要编辑command
字符串并添加数据:
xb'BV5!!!!!!!!!MKKSkEXCELFiles>VijqBof(Y8'w!FId1gLQ /dde /p "C:\Program Files (x86)\Microsoft Office\Office14\EXCEL.EXE" /e "%1"
答案1
有什么想法可以修复这个语法错误吗?
您的(二进制?)字符串包含一个>字符(用于重定向命令的输出到文件)。
你有:
REG_MULTI_SZ /d xb'BV5!!!!!!!!!MKKSkEXCELFiles>VijqBof(Y8'w!FId1gLQ
尝试使用"
:
REG_MULTI_SZ /d "xb'BV5!!!!!!!!!MKKSkEXCELFiles>VijqBof(Y8'w!FId1gLQ"
或者使用以下>
方法退出^>
:
REG_MULTI_SZ /d xb'BV5!!!!!!!!!MKKSkEXCELFiles^>VijqBof(Y8'w!FId1gLQ
此外您的reg add ...
命令看起来不正确。
您没有以两个空字符终止的以空字符结尾的字符串数组。
这是正确的语法。
REG ADD [ROOT]RegKey /v 值名称 [/t 数据类型] [/S 分隔符] [/d 数据] [/f]
在哪里:
/S 分隔符:在 REG_MULTI_SZ 值中用作分隔符的字符,默认值为“\0”
REG_MULTI_SZ 以两个空字符终止的空终止字符串数组。
来源注册表编辑器:
看https://stackoverflow.com/questions/8853911/reg-add-a-reg-multi-sz-multi-line-registry-value了解更多信息
语法:转义符、分隔符和引号
转义符
^ 转义字符。
在命令符号前添加转义字符可以将其视为普通文本。
当通过管道传输或重定向这些字符时,您应该在前面加上转义字符:& \ < > ^ |
e.g. ^\ ^& ^| ^> ^< ^^
进一步阅读
- Windows CMD 命令行的 AZ 索引- 与 Windows cmd 行相关的所有事物的绝佳参考。
- 重定向- 重定向运算符。
- 登记- 读取、设置或删除注册表项和值,并从 .REG 文件保存和恢复。
答案2
DavidPostil 是正确的,你必须将整个数据字符串括在双引号中,然后逃脱并在字符串内加上双引号,以确保它知道它们是字符串的一部分。
在这种情况下,您要添加的整个数据字符串是:
xb'BV5!!!!!!!!!MKKSkEXCELFiles>VijqBof(Y8'w!FId1gLQ /dde /p "C:\Program Files (x86)\Microsoft Office\Office14\EXCEL.EXE" /e "%1"
因此,您需要将整个字符串括在双引号中,以便命令行将其识别为单个字符串(而不是多个参数)。
诀窍在于找出这些分隔引号内的哪些引号(和其他字符)需要转义,然后找出如何在此上下文中转义它们。
我经过反复尝试才弄明白,但在这种情况下,你只需要担心内部的双引号,并通过在它们前面加上反斜杠 ( \
) 来转义它们:
reg add "HKEY_CLASSES_ROOT\Excel.Sheet.12\shell\Open\command" /v command /t REG_MULTI_SZ /d "xb'BV5!!!!!!!!!MKKSkEXCELFiles>VijqBof(Y8'w!FId1gLQ /dde /p \"C:\Program Files (x86)\Microsoft Office\Office14\EXCEL.EXE\" /e \"%1\""
尽管如此,并且基于似乎仍在继续解决的问题,我认为 Ramhound 可能在他的评论中提到了最好/最简单的解决方案。
只需前往一台按您想要的方式设置好的机器,然后将该密钥导出到文件中.reg
。
然后reg import
在批处理文件中使用它来导入该.reg 文件。
如果您不喜欢使用/分发两个文件,并且/或者您没有可以将其放置在网络上的中心位置,那么您始终可以让批处理文件通过将行回显到临时文本文件来动态创建 .reg 文件,导入它,然后在完成后删除临时文件。