以管理员身份运行一个简单的批处理文件(.cmd)(右键单击-->以管理员身份运行)时,它只是在任务栏中闪烁,没有发生任何其他事情。
只需双击运行文件就可以了。
.cmd 文件的总内容:
@echo off
set /p DUMMY=Done executing...
事件查看器中没有日志或我发现的错误消息...有什么想法可以尝试吗?
答案1
空格、与号、管道符等字符在 Windows 命令行中具有特殊含义,应逃脱。 右键点击以管理员身份运行可以为特定可执行文件PATHEXT
相应注册表项中的文件类型(变量中的扩展名)-HKEY_CLASSES_ROOT\cmdfile
例如HKEY_CLASSES_ROOT\batfile
Windowscmd
脚本:
assoc .cmd & assoc .bat
.cmd=cmdfile .bat=batfile
右键点击以管理员身份运行这些文件类型的操作是起初定义如下:
reg query "HKEY_CLASSES_ROOT\cmdfile\Shell\runas\command"
reg query "HKEY_CLASSES_ROOT\batfile\Shell\runas\command"
HKEY_CLASSES_ROOT\cmdfile\Shell\runas\command (Default) REG_EXPAND_SZ %SystemRoot%\System32\cmd.exe /C "%1" %* HKEY_CLASSES_ROOT\batfile\Shell\runas\command (Default) REG_EXPAND_SZ %SystemRoot%\System32\cmd.exe /C "%1" %*
不幸的是,双引号被删掉了(见cmd /?
):
如果指定了
/C
或/K
,则开关后的命令行其余部分将作为命令行进行处理,其中使用以下逻辑来处理引号("
)字符:
...
旧行为是查看第一个字符是否为引号字符,如果是,则删除前导字符并删除命令行上的最后一个引号字符,保留最后一个引号字符后的任何文本。
因此,我们需要调用以下命令:
%SystemRoot%\System32\cmd.exe /C ""%1" %*"
rem ↑ ↑
为此,打开升高命令提示符并运行以下命令(同时运行reg add
命令,batfile
予以适当修改):
set auxvar=^%SystemRoot^%\System32\cmd.exe
reg add "HKEY_CLASSES_ROOT\cmdfile\Shell\runas\command" /ve /t REG_EXPAND_SZ /d "%auxvar% /C \"\"%1\" %*\"" /f
The operation completed successfully.
reg query "HKEY_CLASSES_ROOT\cmdfile\Shell\runas\command"
HKEY_CLASSES_ROOT\cmdfile\Shell\runas\command (Default) REG_EXPAND_SZ %SystemRoot%\System32\cmd.exe /C ""%1" %*"
如果您更喜欢通过.bat
或.cmd
脚本执行此操作,则reg add
命令应如下所示:
reg add "HKEY_CLASSES_ROOT\cmdfile\Shell\runas\command" /ve /t REG_EXPAND_SZ /d "%%SystemRoot%%\System32\cmd.exe /C \"\"%%1\" %%*\"" /f
答案2
这是因为文件所在的路径。路径不能包含“&”符号,并且“@”和空格的组合也不起作用:
C:/temp/test.cmd-作品!
C:/temp&/test.cmd——不起作用!
C:/temp &/test.cmd——不起作用!
C:/temp@/test.cmd-作品!
C:/temp @/test.cmd——不起作用!
有道理吧?:) Windows 错误...