Batch file 批处理文件中的一个reg加载项有问题

Batch file 批处理文件中的一个reg加载项有问题,batch-file,regedit,Batch File,Regedit,我有一个带有两个reg add命令的批处理文件。两者似乎都能工作,但其中一个会在注册表中显示约5秒钟,然后消失。我已经尝试了所有的格式样式,但无法坚持。以下是我正在使用的两个注册添加: reg add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v CrashPlanTray /t REG_SZ /d C:\Users\%USERNAME%\AppData\Local\Programs\CrashPlan\electron\Crash

我有一个带有两个reg add命令的批处理文件。两者似乎都能工作,但其中一个会在注册表中显示约5秒钟,然后消失。我已经尝试了所有的格式样式,但无法坚持。以下是我正在使用的两个注册添加:

 reg add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v CrashPlanTray /t REG_SZ /d C:\Users\%USERNAME%\AppData\Local\Programs\CrashPlan\electron\CrashPlanDesktop.exe --menubar --desktop=false --user.install

这是第一个不会粘在一起的CrashPlanTray

我尝试过在数据值之前和数据值末尾添加
\
。它会将它添加到注册表中,但几秒钟后它就会消失

 reg add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v CrashPlanTray /t REG_SZ /d "\"C:\Users\%USERNAME%\AppData\Local\Programs\CrashPlan\electron\CrashPlanDesktop.exe\" --menubar --desktop=false --user.install

几天来,我一直在解决这个问题。我可以让它工作,并从命令窗口坚持,但一旦我把它放在批处理文件中,它就不再坚持了。我需要一些专家的帮助来弄清楚为什么它不会粘在注册表中?

在第一次添加注册表时,请尝试以下操作:

reg add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v CrashPlanTray /t REG_SZ /d "\"%localappdata%\Programs\CrashPlan\electron\CrashPlanDesktop.exe\" --menubar --desktop=false --user.install"
请特别注意将完整字符串括在注册表中的双引号(开始和结束),以及括在路径中的转义引号(出于演示目的,我缩短了上述路径:

"\"%localappdata%\..\CrashPlanDesktop.exe\" --menubar --desktop=false --user.install"

最后,还要注意,我们可以使用
%localappdata%
而不是
C:\users\%username%\..
我要做的第一件事是因为位置使用环境变量是使用
REG\u EXPAND\u SZ
,而不是
REG\u SZ

我会使用反斜杠来转义任何内部双引号并保护位置,因为它们可能包含空格之类的内容

我将常用字符串设置为顶部的值,以便更容易修改和缩短行,并且可能会使用插入符号,
^
进一步缩短行以提高可读性

最后,如果您想从注册表运行项运行
VBScript
,您应该真正从
WScript.exe
CScript.exe
运行它。下面的示例使用
WScript
,但您可以根据需要将其替换为
CScript
和任何必需的选项

@Set“Key=HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run”
@设置“Loc=%%LocalAppData%%\Programs\CrashPlan”
@注册添加“%Key%”/V“CrashPlanTray”/T注册扩展^
“\%Loc%\electron\CrashPlanDesktop.exe\”--menubar--desktop=false--user.install”/F>Nul
@注册添加“%Key%”/V“crashplanservice用户”/T注册\u扩展\u SZ/D^
“WScript\%Loc%\CrashPlanService.vbs\”“/F>Nul

我不知道到底发生了什么变化,但在完全卸载并重新安装CrashPlan后,一切都恢复正常。我现在可以运行批处理文件来禁用并重新启用它。它们现在工作正常。您的努力并没有白费,因为我正在使用您在修订的批处理文件中建议的内容片段,这使它们变得更加有用h阅读和使用更干净。感谢您的帮助和耐心。

%appdata%不是
C:\users\%username%\appdata\local
。它是
C:\users\%username%\appdata\Roaming
。我认为将脚本放入漫游配置文件是不明智的。@montonero感谢您突出显示了这一点,我有时会不假思索地键入它s、 更新。我真的不想把它放在漫游中。当人们在互联网不便宜或带宽不好的国家时,我基本上要删除两个注册表项来禁用crashplan。当他们返回他们的祖国时,我只是想把删除的内容放回去。我的用户不是技术性的,我需要简单的解决方案(即Stop.bat和Start.bat,没有任何用户交互,当然运行批处理文件除外。)@RSquared我已经将其更新为转到本地,而不是漫游,这只是我键入答案时的一个简单错误。好的,尝试了你的答案并得到了相同的结果。问题是无法使用正确的值将其放入注册表…问题是使其在注册表中停留10秒以上。它会继续,然后消失。它不会“粘住”(我可能不应该使用stick这样的词,因为可能不是每个人都能正确理解它们。)我正试图将它放回CrashPlan安装时的样子。我有一个批处理文件,用于为所有用户安装CP时(默认安装)它工作完美无瑕。这是为那些选择为单个用户安装它的用户而设计的,因此它会改变某些东西的位置,并且它不是您可以使用SC控制和编辑的正常服务。对不起,我想我应该提供更多关于原始条目的背景信息,以便更全面地理解。我的错误:(感谢您的评论@RSquared。我提供了正确创建您的条目的代码,并提供了其他建议,以改进您以前的内容。如果您不想接受我的建议,您不必接受,这是您的问题和选择。好的,这非常有趣。它似乎会一直坚持到我真正启动服务为止。这哈It’我在想,也许我不完全了解这两个注册表项(即参数--user.install???)的情况。我稍后将进一步了解这些。可能是周一,因为我有明天和周末的计划。当我按原样运行这些时,%%LocalAppData%%将作为:WScript写入注册表值%LocalAppData%\Programs\CrashPlan\CrashPlanService.vbs"。LocalAppData变量似乎不是一个有效的系统变量???我现在有了新的想法!@RSquared,打开一个命令提示窗口,输入
Set
查看您环境中的所有变量。如果您想加快进程,请输入
Set L
查看所有以字母
L。当您使用
REG_EXPAND_SZ
键时,变量会在数据字符串实际运行时展开,而不是作为已展开的字符串存放在那里,
REG_SZ
。使用命令窗口中的集合,我可以看到%LOCALAPPDATA%,它包含正确的值。我不知道具体发生了什么变化,但在完全更改之后卸载并重新安装CrashPlan,然后运行
"\"%localappdata%\..\CrashPlanDesktop.exe\" --menubar --desktop=false --user.install"