netsh命令返回无法识别的错误,未知原因

时间:2013-12-03 02:20:28

标签: batch-file block rule netsh

@echo off
@title Program Internet Disconnector
REM check for admin rights code was here but is too long for this post    
cls
setlocal EnableDelayedExpansion
cls
echo Press any key to Start
pause >nul
cls
set i=0
for %%x in (exe) do (
for /r %%a in (*.%%x) do (
set /a i+=1
set P!i!=%%~fdpa
set F!i!=%%~nxa
))
set y=0
:lock
set /a y+=1
if %y% gtr %i% (
goto Done)
set exec=!F%y%!
set path=!P%y%!
echo:

变量execpath的这些值正常返回(即executable.exeC:\),就像它们应该的那样:

echo %exec%
echo %path%
pause

但是,问题是netsh命令返回错误 'netsh' is not recognized as an internal or external command, operable program or batch file.

netsh advfirewall firewall add rule name="%exec%" dir=in action=block program="%path%" enable=yes
netsh advfirewall firewall add rule name="%exec%" dir=out action=block program="%path%" enable=yes
pause
goto lock
:Done
echo:
echo Press any key to exit...
Pause >nul
exit

这里的问题是什么,因为我无法分辨为什么这段代码不仅仅是阻止程序并继续前进。我之前甚至以类似的方式使用过这段代码而没有错误。有谁知道什么是错的?

1 个答案:

答案 0 :(得分:0)

PATH是一个特殊变量 - 它包含一个; - 已分隔目录的列表,用于搜索可执行文件。当您更改path时,无法再找到可执行文件netsh.exe。

解决方案:不要尝试将path用作用户变量(同样,在提示符处发出set命令时列出的任何其他变量。) - 以及其他类似{{1} },randomtime等...