alex_diablo
Постоянный участник
- Сообщения
- 144
- Реакции
- 9
subnet1="10.6"
subnet2="10.7"
subnet3="10.8"
subnet4="10.9"
......
ipconfig
@echo off
SetLocal EnableExtensions
set "subnet1=10.6"
set "subnet2=10.7"
set "subnet3=10.8"
set "subnet4=10.9"
set subnetCnt=4
For /F "delims=" %%a in ('ipconfig /all^| findstr /i /c:"Маска подсети" /c:"Subnet"') do (
For /L %%C in (1,1,%subnetCnt%) do echo %%a|>NUL call find /i "%%subnet%%C%%" && set subnetNum=%%C
)
if defined subnetNum (
call echo Found subnet: "subnet%subnetNum%" - "%%subnet%subnetNum%%%"
) else (
echo Subnet not found!
)
pause
Сохранять в кодировке OEM-866.
CMD/BATCH:@echo off SetLocal EnableExtensions set "subnet1=10.6" set "subnet2=10.7" set "subnet3=10.8" set "subnet4=10.9" set subnetCnt=4 For /F "delims=" %%a in ('ipconfig /all^| findstr /i /c:"Маска подсети" /c:"Subnet"') do ( For /L %%C in (1,1,%subnetCnt%) do echo %%a|>NUL call find /i "%%subnet%%C%%" && set subnetNum=%%C ) if defined subnetNum ( call echo Found subnet: "subnet%subnetNum%" - "%%subnet%subnetNum%%%" ) else ( echo Subnet not found! ) pause
@echo off
ipconfig | findstr /i /c:"ipv4" >ip.txt
set /p ip="" <ip.txt
if "%ip:10.5=%" neq "%ip%" set a=subnet1
if "%ip:10.6=%" neq "%ip%" set a=subnet2
if "%ip:10.7=%" neq "%ip%" set a=subnet3
echo %a%
Так Вам что искать нужно ip-адрес с префиксом или маску подсети?"ipv4
Командаа нельзя ли сделать вот так
Будет сохранять в переменную только первую строку файла ip.txtset /p ip="" <ip.txt
Да. Это вполне приемлемая проверка.
@echo off
SetLocal EnableExtensions
For /F "delims=" %%a in ('ipconfig ^| find /i "ipv4"') do call :FindIP "%%a"
if Defined a echo %a%
pause
goto: eof
:FindIP
set "ip=%~1"
if "%ip:10.5=%" neq "%ip%" set a=subnet1
if "%ip:10.6=%" neq "%ip%" set a=subnet2
if "%ip:10.7=%" neq "%ip%" set a=subnet3
exit /B
Так Вам что искать нужно ip-адрес с префиксом или маску подсети?
Потому что я сделал поиск именно подсети...
Команда
Будет сохранять в переменную только первую строку файла ip.txt
Соответственно Вы будете проверять адрес только первого (неизвестно какого ?) адаптера из нескольких. А там могут быть не только физические, но и виртуальные.
Да. Это вполне приемлемая проверка.
Только вот Вам придется каждый раз вносить правки в код, если потребуется поменять условия.
А в моем варианте, только добавить еще одну переменную и указать их кол-во.
Для поиска по всем адаптерам Ваш код можно переписать подобным образом:
CMD/BATCH:@echo off SetLocal EnableExtensions For /F "delims=" %%a in ('ipconfig ^| find /i "ipv4"') do call :FindIP "%%a" if Defined a echo %a% pause goto: eof :FindIP set "ip=%~1" if "%ip:10.5=%" neq "%ip%" set a=subnet1 if "%ip:10.6=%" neq "%ip%" set a=subnet2 if "%ip:10.7=%" neq "%ip%" set a=subnet3 exit /B
set folder=0
set office1=\\server1\soft\
set office2=\\server2\soft\
set office3=\\server3\soft\
Сохранять в кодировке OEM-866.
CMD/BATCH:@echo off SetLocal EnableExtensions set "subnet1=10.6" set "subnet2=10.7" set "subnet3=10.8" set "subnet4=10.9" set subnetCnt=4 For /F "delims=" %%a in ('ipconfig /all^| findstr /i /c:"Маска подсети" /c:"Subnet"') do ( For /L %%C in (1,1,%subnetCnt%) do echo %%a|>NUL call find /i "%%subnet%%C%%" && set subnetNum=%%C ) if defined subnetNum ( call echo Found subnet: "subnet%subnetNum%" - "%%subnet%subnetNum%%%" ) else ( echo Subnet not found! ) pause
Еще раз говорю, не путайте подсеть и адресацию IP-адресов/шлюз. У Вас разные шлюзы, на не подсети. Подсети у всех могут быть одинаковыми (по-умолчанию, 255.255.255.0), шлюзы кстати, тоже.задача состоит в том, что в зависимости от того, в какой подсети мы запускаем скрипт,
@echo off
SetLocal EnableExtensions
set subnetCnt=4
set "subnet1=10.6"
set "subnet2=10.7"
set "subnet3=10.8"
set "subnet4=10.9"
set "office1=\\server1\soft\"
set "office2=\\server2\soft\"
set "office3=\\server3\soft\"
set "office4=\\server4\soft\"
For /F "delims=" %%a in ('ipconfig^| find /i "ipv4"') do (
For /L %%C in (1,1,%subnetCnt%) do echo %%a|>NUL call find /i "%%subnet%%C%%" && set subnetNum=%%C
)
if defined subnetNum call set office=%%office%subnetNum%%%
echo Your Folder is: %office%
if not defined subnetNum echo Subnet not found!
pause
Еще раз говорю, не путайте подсеть и адресацию IP-адресов/шлюз. У Вас разные шлюзы, на не подсети. Подсети у всех могут быть одинаковыми (по-умолчанию, 255.255.255.0), шлюзы кстати, тоже.
Чтобы искать по разным октетам IP в моем первом коде + иметь возможность сопоставить этим октетам разные каталоги:
CMD/BATCH:@echo off SetLocal EnableExtensions set subnetCnt=4 set "subnet1=10.6" set "subnet2=10.7" set "subnet3=10.8" set "subnet4=10.9" set "office1=\\server1\soft\" set "office2=\\server2\soft\" set "office3=\\server3\soft\" set "office4=\\server4\soft\" For /F "delims=" %%a in ('ipconfig^| find /i "ipv4"') do ( For /L %%C in (1,1,%subnetCnt%) do echo %%a|>NUL call find /i "%%subnet%%C%%" && set subnetNum=%%C ) if defined subnetNum call set office=%%office%subnetNum%%% echo Your Folder is: %office% if not defined subnetNum echo Subnet not found! pause
Your folder is:
Subnet not found.
Для поиска по всем адаптерам Ваш код можно переписать подобным образом:
CMD/BATCH:@echo off SetLocal EnableExtensions For /F "delims=" %%a in ('ipconfig ^| find /i "ipv4"') do call :FindIP "%%a" if Defined a echo %a% pause goto: eof :FindIP set "ip=%~1" if "%ip:10.5=%" neq "%ip%" set a=subnet1 if "%ip:10.6=%" neq "%ip%" set a=subnet2 if "%ip:10.7=%" neq "%ip%" set a=subnet3 exit /B
Еще раз говорю, не путайте подсеть и адресацию IP-адресов/шлюз. У Вас разные шлюзы, на не подсети. Подсети у всех могут быть одинаковыми (по-умолчанию, 255.255.255.0), шлюзы кстати, тоже.
Чтобы искать по разным октетам IP в моем первом коде + иметь возможность сопоставить этим октетам разные каталоги:
CMD/BATCH:@echo off SetLocal EnableExtensions set subnetCnt=4 set "subnet1=10.6" set "subnet2=10.7" set "subnet3=10.8" set "subnet4=10.9" set "office1=\\server1\soft\" set "office2=\\server2\soft\" set "office3=\\server3\soft\" set "office4=\\server4\soft\" For /F "delims=" %%a in ('ipconfig^| find /i "ipv4"') do ( For /L %%C in (1,1,%subnetCnt%) do echo %%a|>NUL call find /i "%%subnet%%C%%" && set subnetNum=%%C ) if defined subnetNum call set office=%%office%subnetNum%%% echo Your Folder is: %office% if not defined subnetNum echo Subnet not found! pause
if defined subnetNum call set office=%%office%subnetNum%%%
echo Your Folder is: %office%
Сообщение выдается:выдать сообщение что то тпа: пути не найдены
if not defined subnetNum echo Subnet not found!
Если не найден заранее указанный в скрипте subnetNum, значит нет и парной к нему папке, если только Вы не планируете указывать в скрипте октеты без соответствующих им папок.т.е. у нас задача - найти соответствие фактческого айпишника сетевого адаптера заданной переменной, а не просто проверка существования subnetNum
set subnetCnt=3
set "subnet1=10.6"
set "subnet2=10.7"
set "subnet3=10.8"
set "office1=\\server1\Soft\Developers_Tools\Unity"
set "office2=\\server2\soft\"
set "office3=\\server3\soft\"
For /F "delims=" %%a in ('ipconfig^| find /i "ipv4"') do (
For /L %%C in (1,1,%subnetCnt%) do echo %%a|>NUL call find /i "%%subnet%%C%%" && set subnetNum=%%C
)
if defined subnetNum (call set office=%%office%subnetNum%%% & call set folder=%%office%% & goto psexec)
pause
if not defined subnetNum echo Subnet not found!
exit
:psexec
:: default path for psexec:
set "psexecfolder=%folder%"
:: try if psexec exist in defoult folder. if no set path manually
:psexec1
cls
echo.
echo .... Searching PsExec in default folder ...
echo.
echo.
For /f "delims=" %%a in ('dir /b /s /a-d "%psexecfolder%" ^| find /i "psexec.exe"') do call :psexec2 "%%a"
if defined psexec (goto begin) else (cls & echo. & echo. & echo. PsExec not found in default folder. ^
Try to search manually: )
echo.
echo.
set /p psexecfolder=" Enter path for PsExec: "
goto psexec1
:psexec2
set "psexec=%~1"
exit /b
Я вот не пойму, зачем искать хорошо известный файл, если он у Вас уже заранее должен лежать рядом с батником?но тогда не работает поиск файла psxec.exe
set office=%%office%subnetNum%%% &
call set folder=%%office%% &
call set "folder=%%office%%" & следующая команда
echo "%переменная%"
pause
:psexec
:: default path for psexec:
set "psexecfolder=%folder%"
echo set "psexecfolder=%folder%"
pause
For /f "delims=" %%a in ('dir /b /s /a-d "%psexecfolder%" ^| find /i "psexec.exe"') do call :psexec2 "%%a"
For /f "delims=" %%a in ('dir /b /s /a-d "%psexecfolder%\psexec.exe"') do call :psexec2 "%%a"
:psexec2
set "psexec=%~1"
exit /b
... do set "psexec=%%a"
set office=%%office%subnetNum%%%& goto ...
предполагается вероятность, что не всегда и не в каждой шаре может лежать psexec в одном и том же месте (пути к шарам везде разные).Но я бы скинул ее в папку батника или в системный каталог и не морочил бы себе голову.
Зачем этот переход?
Да.а как в данном случае правильно должно быть? вот так?
Так вот у меня исходя из этого и вопрос - зачем Вы запускаете программу psexec из-под шары, а не локально?предполагается вероятность, что не всегда и не в каждой шаре может лежать psexec в одном и том же месте (пути к шарам везде разные).
Еще раз повторюсь, программа ложится рядом с батником, при этом путь к ней не нужно задавать вообще и ничего искать не нужно.либо подскажите, как указать абсолютный путь до файла по умолчанию и сделать дополнительно проверку, что если файл существует,
использовать этот путь. если нет - искать его...
Да.
Так вот у меня исходя из этого и вопрос - зачем Вы запускаете программу psexec из-под шары, а не локально?
Еще раз повторюсь, программа ложится рядом с батником, при этом путь к ней не нужно задавать вообще и ничего искать не нужно.
То что Вы открываете файл, находящийся на шаре не означает, что он на ней же выполняется. Все работает по другому и гораздо сложнее, чем Вы предполагаете.
Если рассказать кратко. На Вашем ПК запускается psexec, который инициирует подключение к удаленному ПК через общий ресурс Admin$,
после чего на удаленном ПК создается служба, которая и обрабатывает все дальнейшие запросы, отправленные с Вашего ПК.
В случае, когда Вы открываете psexec.exe с удаленного ПК, то происходит все лишь еще одно лишнее действие, программа копируется с удаленного ПК во временную папку
на Вашем локальном ПК, после чего запускается на Вашем ПК.
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?