Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
试图通过Windows防火墙打开端口,但仅在进程运行时打开(错误:“Syntaxerror”)_Windows_Batch File_Firewall - Fatal编程技术网

试图通过Windows防火墙打开端口,但仅在进程运行时打开(错误:“Syntaxerror”)

试图通过Windows防火墙打开端口,但仅在进程运行时打开(错误:“Syntaxerror”),windows,batch-file,firewall,Windows,Batch File,Firewall,我想为我做一个小批量脚本,这将帮助我保持跟踪和尽可能有限地监视我的计算机。我使用TinyWall作为我的主防火墙,因为它非常轻巧和简单。通过它的“显示连接”功能,我产生了这样的想法:我可以停止持续允许特定端口/程序,只在我真正需要时才打开它们 所以我写了(经过大量研究)一个批处理脚本,它将添加防火墙例外(打开几个端口),打开特定的程序。之后,如果程序的进程正在运行,我使用if语句在tasklist中不断(在批处理脚本运行时)查找。否则,应删除防火墙例外并关闭程序 当我运行脚本(使用“cmd.ex

我想为我做一个小批量脚本,这将帮助我保持跟踪和尽可能有限地监视我的计算机。我使用TinyWall作为我的主防火墙,因为它非常轻巧和简单。通过它的“显示连接”功能,我产生了这样的想法:我可以停止持续允许特定端口/程序,只在我真正需要时才打开它们

所以我写了(经过大量研究)一个批处理脚本,它将添加防火墙例外(打开几个端口),打开特定的程序。之后,如果程序的进程正在运行,我使用if语句在tasklist中不断(在批处理脚本运行时)查找。否则,应删除防火墙例外并关闭程序

当我运行脚本(使用“cmd.exe/k”)时,程序会打开,但似乎例外情况不适用,因为程序报告没有Internet连接。此外,cmd窗口在程序打开后立即关闭(不带“cmd.exe/k”)。我不想发生这种事

我觉得奇怪的是(使用cmd的/k参数)我只得到“Syntax error”(从我的语言翻译过来,不知道它最初报告了什么)的响应,而没有任何进一步的信息

我需要在管理命令窗口中运行脚本。有没有办法利用这一点?在我使用“advfirewall”(我猜是advanced Firewall)命令之前,它就工作了,但是一些命令手册的帮助告诉我,普通的“Firewall”命令已经过时了,我应该使用“advfirewall Firewall”

有人知道我是如何实现目标的吗?我将非常感激

PS:对不起,我的文字太长了

TLDR:我的脚本不起作用。如果你想帮助我,请看下面的代码

@echo OFF
SETLOCAL
echo Adding Firewall Exceptions for Origin ...
netsh advfirewall firewall add rule name="OriginIn port 3216" dir=in protocol=TCP localport=3216 action=allow
netsh advfirewall firewall add rule name="OriginOut port 3216" dir=out protocol=TCP localport=3216 action=allow
netsh advfirewall firewall add rule name="OriginIn port 49218" dir=in protocol=TCP localport=49218 action=allow
netsh advfirewall firewall add rule name="OriginOut port 49218" dir=out protocol=TCP localport=49218 action=allow
netsh advfirewall firewall add rule name="OriginIn port 49819" dir=in protocol=TCP localport=49819 action=allow
netsh advfirewall firewall add rule name="OriginOut port 49819" dir=out protocol=TCP localport=49819 action=allow
timeout 2
echo Done. Starting Origin. Have fun gaming!
start "Origin" /DE:\Origin\ Origin.exe
tasklist /FI "IMAGENAME eq Origin.exe" 2>NUL | find /I /N "Origin.exe">NUL
if %ERRORLEVEL% GTR 0
(
    netsh advfirewall firewall delete rule name "OriginIn port 3216"
    netsh advfirewall firewall delete rule name "OriginOut port 3216"
    netsh advfirewall firewall delete rule name "OriginIn port 49218"
    netsh advfirewall firewall delete rule name "OriginOut port 49218"
    netsh advfirewall firewall delete rule name "OriginIn port 49819"
    netsh advfirewall firewall delete rule name "OriginOut port 49819"
)
echo Deleting Firewall Exceptions (Reason: Origin isn't running anymore) ...
timeout 5
exit
仅猜测:
start
的帮助表明
D
E
之间应该有一个空格

start "Origin" /DE:\Origin\ Origin.exe