防火墙上下文菜单

时间:2018-09-06 08:52:27

标签: batch-file

目标

  

我需要为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的回答。

1 个答案:

答案 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\"