在当前文件夹中搜索.exe并通过批处理命令自动将它们添加到Windows防火墙

时间:2014-01-24 11:36:03

标签: windows batch-file cmd firewall blocking

我之前设法使这段代码工作但是我丢失了我做过的文件,我无法再弄清楚:(

后台:将此批处理文件拖到其在该文件夹中搜索的任何文件夹中,并通过将其添加到Windows防火墙来阻止所有带有.exe的文件。

我目前在要阻止.exe的文件夹中有批处理文件 我用:

@setlocal enableextensions
@cd /d "%~dp0"
set location=%cd%

设置变量位置,例如:C:\ Users \ UserName \ Desktop。 其他行只是在管理员

中运行批处理时更正位置

我有:

FOR  %%i in (*.exe) do (echo. %%i)

其中显示了放置批处理文件夹中扩展名为.exe的(多个)文件名。例如。 TEST.EXE

我也有:

For /F "tokens=*" %%B In ('Dir "%*" /a-d /b /on /s ^|find ".exe"') Do echo %%B

在放置批处理的文件夹中显示(多个)文件目录及其名称,扩展名为.exe。例如。 C:\ Users \用户名\桌面\将Test.exe

现在的问题是:我如何使用带有以上这些线的for循环(或者如果不需要)将它们添加到防火墙:

netsh advfirewall firewall add rule name="%%i" dir=in action=allow program="%%B"

显然,上面的行不是for循环,变量%% i和%% B不会对文件夹中找到的每个exe重复。

如何将其修复为for循环? %%我应该为每个名称更改,即%% i吐出的文件名是什么。和%% B应该是FOR / F吐出来的。

提前致谢。 詹姆斯

感谢您的帮助。 如果有人需要这个批处理命令,这是完整的脚本:

    @ echo off
@setlocal enableextensions
@cd /d "%~dp0"
color F0
title Exe blocker
echo.
echo.                 ==============================
echo.                 ==  Welcome to .exe blocker ==
echo.                 ==============================
echo.
Echo Current location: %cd%
echo.
CHOICE /C YN /M "Do you want to search in the current location?"
IF Errorlevel 2 goto END
IF Errorlevel 1 goto Yes




::--------------------CHECK and searching files-----------------
:Yes
set location=%cd%
cls
echo.
Echo. Searching for .exe files in %location%
echo.
set /a count=0
echo.___________________________________________
echo.Found:
echo.
FOR  %%i in (*.exe) do (echo. %%i & set /a count+=1)
echo.___________________________________________
echo.
title Exe blocker %count% Files found
echo. Number of files found with .exe extention: %count%
echo.
echo.
set add2=

CHOICE /C YN /M "Do you want to add aditional information?"
IF Errorlevel 2 goto block
IF Errorlevel 1 goto ADD

::-----------------ADD additional info---------------
:ADD
Set /p add=Please type the additonal information for the name:
Set add2=%add% 

::-----------------Add files to firewall--------------
:block
cls
title Exe blocker - Blocking Rules
set /a countt=0
echo.
echo.___________________________________________
echo. Inbound Rules
echo.___________________________________________
FOR /r %%B in (*.exe) do (set /a countt+=1 & echo.%countt%. %%~nxB blocking... & netsh advfirewall firewall add rule name="%add2%%%~nxB" dir=in action=block program="%%~dpfnxB")
echo.___________________________________________
echo. OutBound rules
set /a coun=0
echo.___________________________________________
FOR /r %%B in (*.exe) do (set /a coun+=1 & echo.%coun%. %%~nxB blocking... & netsh advfirewall firewall add rule name="%add2%%%~nxB" dir=out action=block program="%%~dpfnxB")
echo.___________________________________________
Echo. Added files to Firewall
echo.
title Exe blocker - Rules Blocked
Pause

::------------------------END---------------------

:END
cls
ECHO.
Echo. Thanks for using .exe blocker
Echo.

CHOICE /C YN /T 10 /D n /M "Do you want to open firewall? (10 seconds)"
IF Errorlevel 2 goto EXIT
IF Errorlevel 1 goto OPEN

::------------------Open Firewall---------------
:OPEN
start "C:\Windows\System32" rundll32.exe shell32.dll,Control_RunDLL firewall.cpl
Goto EXIT


:EXIT

1 个答案:

答案 0 :(得分:0)

@setlocal enableextensions
@cd /d "%~dp0"
@echo off
set location=%cd%
For /r  %%B In (.*exe) Do (
    echo %%B
    echo %%~nxB
    netsh advfirewall firewall add rule name="%%~nxB" dir=in action=allow program="%%~dpfnxB"
)