CMD/BAT - синтаксис bat -ника

Аватара пользователя
bredych

CMD/BAT - синтаксис bat -ника

Сообщение bredych »

собственно вопрос в синтаксисе - если в цикле "если, то" команда со свитчами, надо-ли её как-то выделять? Кавычками там или скобками, чтоб исполняющий софт не понял, что команда уже закончена и надо ожидать ELSE

гугление ответа не даёт, а сам что-то склерожу совершенно жестоко.



Если привязаться к конкретно скрипту, то сейчас рисую такое - (даётся лист машин с проблемами всуса, на них останавливается служба винапдейта и в зависимости от версии выни тихо и с последующим принудительным рестартом устанавливается обновление клиента винапдейта для вин 8 или 7. )



Код:

Код: Выделить всё

set DomainUserUPN=(мойдомен)\(админскийакк)
set /P DomainUserPassword=password...
set FLOG=%~n0.log
set FLIST=ADlist.txt
set w7up=Windows6.1-KB3172605-x86(WU_update).msu
set w8up=Windows8.1-KB3172614-x86(WU_update).msu
if exist %FLOG% set FLIST=%FLOG%
for /f "tokens=*" %%i in (%FLIST%) do call :updWU %%i
goto RETURN
:updWU
for %%k in ( bits,wuauserv,appidsvc,cryptsvc ) do ( psexec \\%1 -u %DomainUserUPN% - p %DomainUserPassword% net stop %%k )

для локальной машины это было бы в одну строку (только неясно, отделять ли команду со свитчами чем-то



Код:

Код: Выделить всё

if /f "skip=4 delims=" %%G in ('systeminfo | findstr /B /C:"OS Name" /C:"OS Version"') EQU 7 start %w7up% /quiet /forcerestart else start %w8up% /quiet /forcerestart

или вроде того, а для удаленной - вероятно, что--то вроде



Код:

Код: Выделить всё

if /f "skip=4 delims=" %%G in ('psinfo \\%1 -u %DomainUserUPN% - p %DomainUserPassword% kernel') EQU 7 start %w7up% /quiet /forcerestart else start %w8up% /quiet /forcerestart

и переменная должна уже тоже включать psexec с параметрами...

Можно, конечно, выделить в goto, но неужели нет изящного в одну строку решения?





это не единственная проблема, вопросы к синтаксису будут регулярно, наверно, возникать))
Аватара пользователя
bredych

Re: CMD/BAT - синтаксис bat -ника

Сообщение bredych »

Код:

Код: Выделить всё

@echo off
for /f "tokens=3" %%a in ('wmic path Win32_OperatingSystem get Caption /value^|find "="') do if %%a==7 (echo win 7) else if %%a==8 (echo win 8)
pause
Аватара пользователя
sov44

Re: CMD/BAT - синтаксис bat -ника

Сообщение sov44 »

alpap, мне для удалённой машины... Точнее машин. Не локальной.
Аватара пользователя
alpap

Re: CMD/BAT - синтаксис bat -ника

Сообщение alpap »

Код:

Код: Выделить всё

@echo off
for /f "tokens=3" %%a in ('wmic path Win32_OperatingSystem get Caption /value^|find "="') do if %%a==7 (echo win 7) else if %%a==8 (echo win 8)
pause
Аватара пользователя
bredych

Re: CMD/BAT - синтаксис bat -ника

Сообщение bredych »

alpap, мне для удалённой машины... Точнее машин. Не локальной.
Аватара пользователя
alpap

Re: CMD/BAT - синтаксис bat -ника

Сообщение alpap »

Код:

Код: Выделить всё

SET Node=%ComputerName%
WMIC.EXE /Node:"%Node%" Path

и в for после do ставите свой psexec в нужном месте условия и "удаляете" все что надо, вот только мне кажется что проблема у вас немного в другом Изображение
Аватара пользователя
bredych

Re: CMD/BAT - синтаксис bat -ника

Сообщение bredych »

о, не знал, что она с сетью умеет, спасибо



хм.. попробовал..



Код:

Код: Выделить всё

:updWU
for %%k in ( bits,wuauserv,appidsvc,cryptsvc ) do ( psexec \\%1 -u %DomainUserUPN% -p %DomainUserPassword% net stop %%k )
for /f "tokens=3" %%a in ('wmic /node:%1 path Win32_OperatingSystem get Caption /value^|find "="') do if %%a==7 goto w7 else if %%a==8 goto w8
pause
:w7
psexec \\%1 -u %DomainUserUPN% -p %DomainUserPassword% -i -d -c D:\Install\SysTools\%w7up% /quiet /forcerestart
goto returm
:w8
psexec \\%1 -u %DomainUserUPN% -p %DomainUserPassword% -i -d -c D:\Install\SysTools\%w8up% /quiet /forcerestart
goto return
:return

- смотрю исполнение -





Код:

Код: Выделить всё

>for /F "tokens=3" %a in ('wmic /node:(имякомпа) path Win32_Operat
ingSystem get Caption /value|find "="') do if %a == 7 goto w7 else if %a==8 goto
 w8
Invalid Global Switch.

Вы об этом? Или еще где-то накосячено?
Аватара пользователя
alpap

Re: CMD/BAT - синтаксис bat -ника

Сообщение alpap »

тогда уже аккуратнее так (вы все скобки растеряли):



Код:

Код: Выделить всё

...
for /f "tokens=3" %%a in ('wmic /node:%1 path Win32_OperatingSystem get Caption /value^|find "="') do (
 if %%a==7 set "up=Windows6.1-KB3172605-x86(WU_update).msu"
 if %%a==8 set "up=Windows8.1-KB3172614-x86(WU_update).msu"
)
psexec \\%1 -u %DomainUserUPN% -p %DomainUserPassword% -i -d -c D:\Install\SysTools\%up% /quiet /forcerestart
...
Аватара пользователя
bredych

Re: CMD/BAT - синтаксис bat -ника

Сообщение bredych »

хм.. да, спасибо, так аккуратнее, но всё равно invalid global switch.

Где-то косяк в синтаксисе, но какой, не пойму..
Ответить

Вернуться в «Скриптовые языки администрирования Windows»