如何从命令行使用REG_EXPAND_SZ?

col*_*mik 4 windows command-line batch-file

我正在阅读有关修改Windows注册表的命令的Windows命令行文档(Win + F1),特别是"reg add"命令.

reg add HKCU\testfolder /t REG_EXPAND_SZ /v Stokrotka /d "%systemroot%\system32"
Run Code Online (Sandbox Code Playgroud)

现在,我不知道这是如何设计的.当我调用上面的命令时,变量%systemroot%会扩展为C:\Windows.我试过以下不要让变量扩展,但是我无法强迫它不要:

  • 使用`%,^,\`转义`%%` - 即使我使用双引号也不起作用
  • 在整个/ d字符串周围使用单引号''
  • 使用`setlocal setdelayedexpansion`?......喜欢:

# (setlocal enabledelayedexpansion) && (reg add HKCU\testfolder /t REG_EXPAND_SZ /v Stokrotka /d "!systemroot!\system32") && (setlocal disabledelayedexpansion)

变量'data'(/ d)字段^%systemroot^%或者类似!systemroot!或者只是扩展到C:\ windows.我可以使用.reg文件来完成我的任务,但我根本不想这样做.
我认为可能用于显示变量contents(regedit / regedt32 / reg query (commandline))的程序有问题,但在检查之后可能不是这种情况.
有任何想法吗?我主要感兴趣的是变量值在regedit窗口中应该是什么样子,如果它是:"%systemroot%\system32"或者"C:\windows\system32"被其他程序正确扩展.问候.

aph*_*ria 5

从命令行,这对我有用:

reg add HKCU\testfolder /t REG_EXPAND_SZ /v Stokrotka /d ^%systemroot^%\system32
Run Code Online (Sandbox Code Playgroud)


miv*_*ivk 5

aphoria 建议的语法是正确的,正如您发现的那样,没有引号。但是,当您需要值中的空格时,就会遇到麻烦。

但是,可以在值中混合引号。它看起来很奇怪,但它有效:

REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /d ^%SystemRoot^%;c:\Program" Files"\Intel\DMIX;C:\bin /t REG_EXPAND_SZ

您可以在需要的地方使用引号,但不要在变量周围使用引号。而且不是在反斜杠之后。

另外,请注意批处理文件中使用的语法与命令行中使用的语法不同。如果将该行放入批处理文件中,则需要将“^”替换为另一个“%”:

REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /d %%SystemRoot%%;c:\Program" Files"\Intel\DMIX;C:\bin /t REG_EXPAND_SZ
Run Code Online (Sandbox Code Playgroud)

(cmd.exe 总是让我想起 Henry Spencer 的名言“那些不懂 Unix 的人注定要重新发明它,很糟糕”