我需要为
Block Firewall Context Menu
个文件添加.exe
。
Block .EXE in Windows Firewall with context menu(为我使用而修改)
Windows 10 | regedit | exefile shell command (firewall add rule) - not running(那里没有答案)
Reg Add "HKEY_CLASSES_ROOT\exefile\Shell\Firewall\Command" /T Reg_SZ /D "Elevate.exe CMD.exe /Q /C For %%%%A In (\"%%1\") Do Netsh Advfirewall Firewall Add Rule Name=\"%%~nA\" Dir=Out Action=Block Program=\"%%1\""
与 filepath-that-doesnt-contain-space
如果 filepath containing spaces
,它将简单地抛出此错误。为了调试,我在上一个代码的末尾添加了& pause
A specified value is not valid.
Usage: add rule name=<string>
dir=in|out
..
Press any key to continue. . .
两次
A specified value is not valid.
Usage: add rule name=<string>
dir=in|out
..
Press any key to continue. . .
我不确定为什么要运行两次代码。我可以提出的一种理论是,也许它正在尝试将 folder with spaces in path as filename
和 filename
添加到 {{1} } ?
使用 netsh
进行调试时,我发现它在 Echo
<中没有 ""
/ strong>和 Netsh Rule Name=""
,如果其中包含 Program=""
,我认为这是必需的。我相信缺少的 path or filename has spaces
可能导致了此问题。
我还尝试了转义并添加了双引号。仍然不起作用。
"Qoutes"
我希望我们可以一起解决这个问题。如果需要,我将编辑和更新OP,以进行更多的澄清或更新。 谢谢@micheal_heath的回答。
答案 0 :(得分:0)
Reg Add "HKLM\Software\Classes\exefile\shell\Firewall\command"^
/T REG_SZ^
/D "Elevate.exe CMD.exe /Q /C For %%%%A In (\\\"%%1\\\") Do Netsh Advfirewall Firewall Add Rule Name=\\\"%%~nA\\\" Dir=Out Action=Block Program=\\\"%%1\\\""^
/F
使用elevate,您可能需要转义双引号。
它由C制成,它使用argv
进行参数处理
就像reg
用来解析参数一样。
reg
从\
中删除\"
,因此保留"
。
问题在于,用elevate
执行"
并不是
使用\
进行转义,则删除"
。
因此,带有空格的路径现在没有外部"
来保留它们
不会被分裂。
通过在\
之前添加另一个\"
解决此问题。
如果仅使用一个\
成为\\"
,请跳过以下内容
\
,因此"
被删除。因此,再添加一个\
即可
\\\"
逃离\
并逃离"
,以便\
被保留,"
被保留。
因此reg
解析\\\"
,elevate
解析\"
和cmd
解析"
。
插入注册表中的样子:
Elevate.exe CMD.exe /Q /C For %%A In (\"%1\") Do Netsh Advfirewall Firewall Add Rule Name=\"%~nA\" Dir=Out Action=Block Program=\"%1\"