2013-12-03 3 views
0
@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: 

Эти значения для переменных exec и path, возвращение нормально (т.е. executable.exe и C:\) так же, как они должны:Netsh команда возвращения неопознанная ошибка, причина неизвестна

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 

W Это проблема здесь, так как я не могу понять, почему этот код не просто блокирует программу и движется дальше. Я даже использовал этот код один раз раньше, аналогичным образом без ошибки. Кто-нибудь знает, что случилось?

+0

Возможно, netsh не установлен на вашем ПК. Если вы откроете командную строку и введите 'netsh', вы получите приглашение' netsh> '? – unclemeat

ответ

0

PATH - специальная переменная - содержит список ; - разделенные каталоги, которые ищут исполняемый файл. Когда вы меняете path, исполняемый файл netsh.exe больше не может быть найден.

Решение: не пытайтесь использовать path как пользователь переменной (равно, любой другой переменной в списке, когда вы выдаете set команду в командной строке.) - и другие подобные random, time, date и т.д. ...

+0

Я знал, что путь был «специальной переменной», и тем не менее даже так он проходит прямо над моей головой, что он был в моем коде, написанном точно как путь ... * facepalm *. это была проблема, спасибо! –