Войти

Показать полную графическую версию : [решено] Как записать в переменную результат выполнения команды?


Страниц : 1 2 [3] 4

Iska
06-11-2018, 22:16
Ясно. Тогда следовало бы упомянуть данное:
на удаленной машине выполняю скрипт »
условие зараз. Равно как и причину, по которой Вы пользуете psexec, но не пользуете тот же Wbem для удалённого доступа (wmic.exe /node:RemoteMachine ComputerSystem get UserName…).

@echo off
setlocal enableextensions enabledelayedexpansion

for /f "usebackq delims=" %%i in (
`2^>nul wmic.exe ComputerSystem get UserName /value ^| 2^>nul find.exe /i "UserName="`
) do for /f "tokens=1,3 delims==\" %%j in ("%%~i") do (
set s%%~j=%%~k
)

if defined sUserName echo [%sUserName%].

endlocal
exit /b 0

zbeypepels
07-10-2019, 18:19
вывести путь от куда запущены текущие java.exe процессы, без вывода аргументов с которыми он стартован?

@echo off
setlocal ENABLEDELAYEDEXPANSION

rem Стартуем с %А а кончаем с %B
for /f "tokens=1* delims==" %%A in ('
wmic process where "Name='svchost.exe'" get ExecutablePath /value ^|findstr :
') do @if not X%%i==X set ProcPath=!ProcPath!%%B;

echo ProcPath: %ProcPath%
pause
exit

a_Wizard
15-10-2019, 08:03
Не нашел точно подходящую тему относительно поставленной для .bat-файла задачи, поэтому пишу здесь (если все-же есть такая тема, просьба перенести мой пост туда).
Задача у меня такая. Имеется сайт на котором несколько тв-каналов. С них каждые 2 часа нужно извлекать их видеопотоки и вставлять в плейлист IPTV (каждые 2 часа потому, что таков срок живучести ссылок с данного сайта). Вручную выполнять эту задачу несколько раз в день утомительно (хотя сами потоки я умею извлекать). Поэтому подумал, может есть возможность написать .bat-файл, который будет выполнять эту задачу вместо меня. Пожалуйста дайте направление как это делается. Замечу, что такое реализовано в видеодополнениях приложения Kodi (для Android устройств), где ссылки обновляются на лету. Однако все эти скрипты для меня непостижимы. Потому решил спросить тут. Кто-нибудь может помочь?

alpap
15-10-2019, 12:34
монтировку для извлечения потоков в планировщик под предел <= 2часа

Unter
24-03-2020, 03:15
Есть программа, работает с флешки. Для обновления собственных баз запускается с ключами. Запуск идет через батник в котором формируется среда и временные папки. Некоторое время назад после очередного обновления, программа стала реагировать на состояние USB портов. Если в порт что то вставить или вынуть, она уходит из под контроля скрипта(проверял в CMD и VBS), а скрипт продолжает свою работу: очищает или удаляет временные папки и файлы, соответственно работа программы завершается. Нашел выход в следующем: после строки запуска поставил цикл в котором отслеживается PID программы пока она находится в процессах, но не могу понять, как получить errorlevel для заключительных операций. Запуск может проходить сразу с нескольких флешек. Донести проблему до разработчика нереально - скорее всего аутсорсинг. Может кто знает как получить код возврата, отпишитесь пожалуйста.

Iska
24-03-2020, 12:04
Unter, расскажите то же самое, только теперь предметно.

Unter
24-03-2020, 23:39
Проще говоря, можно как нибудь получить код возврата программы, если скрипт не ждет ее завершения.

Iska
25-03-2020, 00:42
Unter, первый вопрос — как он определит момент, когда пора получать код возврата?

Вы явно не тем занимаетесь. Надо решать:
Некоторое время назад после очередного обновления, программа стала реагировать на состояние USB портов. Если в порт что то вставить или вынуть, она уходит из под контроля скрипта »

Unter
25-03-2020, 08:35
как он определит момент, когда пора получать код возврата »
после строки запуска поставил цикл в котором отслеживается PID программы пока она находится в процессах »
Как уже писал выше: "Донести проблему до разработчика нереально". И предупреждая следующий вопрос, проблема не в компьютере и не в Windows. Проверял на 10-ке и 7-ке, хотя поначалу грешил на 10 и даже Microsoft потревожил, но затем проверил на других компьютерах и убедился, что виновата программа. Возможно есть способ выгрузить код в файл.

Iska
25-03-2020, 08:59
Unter, покажите Ваш код, в котором:
она уходит из под контроля скрипта(проверял в CMD и VBS), »

Unter
26-03-2020, 02:16
Спасибо всем кто пытался разобраться в моей "компетентности". Я нашел решение, возможно временное, но рабочее. Оно вытекает из логики запуска данного приложения. Запуск происходит EXE файлом небольшого размера, который делает первичные проверки и настройки и запускает рядом лежащий файл, который на самом деле является основным исполняемым модулем и прекрасно запускается через start. Видимо стартовый экзешник зачем то сканирует состояние USB устройств и при этом либо закрывается(пока не проверял), либо меняет свое состояние и скрипт начинает считать, что программа завершила работу, хотя основной модуль находится в памяти. Эх если бы это разработчикам донести.

YuS_2
26-03-2020, 08:09
Спасибо всем кто пытался разобраться в моей "компетентности". »
Дело не в "разбирательствах о компетентности". Просто анализ выданной информации и поиск решения, будет сродни "гаданию на кофейной гуще" и результат, естественно, получится соответствующий... он такой нужен вам? :)
Как минимум, необходимо увидеть строку:
Запуск идет через батник »
т.е. не предварительные действия, по формированию среды и каталогов, а именно запуск программы, а также, надо бы уточнить, более конкретные действия, которые должны выполняться по завершению программы...
а вообще, в cmd, есть команда start, у которой есть ключ WAIT
WAIT Запуск приложения с ожиданием его завершения.
или же, непосредственный запуск программы, тоже должен происходить с ожиданием завершения, т.е. скрипт, от строки запуска, не будет выполняться пока не завершится та программа.

Unter
26-03-2020, 09:37
Идет именно формирование среды - переменная %TEMP% и каталоги в ней ну и неужели вы думаете что я про старт /wait не знаю, хотя в батниках можно и без нее обходиться. Ну а в VBS запуск шел через CreateObject("WScript.Shell").run

Iska
26-03-2020, 09:58
Unter, причём тут Ваша компетентность? Речь идёт о воспроизводимости.

YuS_2
26-03-2020, 11:58
ну и неужели вы думаете что я про старт /wait не знаю »
Понимаете, телепатия - моя не самая сильная сторона, а гадания на кофейной гуще очень плохо получаются... :)
"Секретную" строчку Вы показывать не желаете... соответственно, помочь вам, пока нечем. Ну, кроме как поговорить на общие темы... но это уже во флейм.

Wolf_46
27-03-2020, 11:12
Здравствуйте.
Предстоит на большом количестве ПК с winXP/7 удаленно поменять в параметрах соединения шлюз и днс.
Решение вижу следующим:
-получить имя соединения
команда wmic path Win32_NetworkAdapter where NetConnectionStatus="2" get NetConnectionID | find "одключ" выдает то что нужно

-используя полученное имя соединения, при помощи команды netsh внести необходимые изменения

Но по какой-то причине < wmic path Win32_NetworkAdapter where NetConnectionStatus="2" get NetConnectionID | find "одключ" > в bat-нике работает некорректно:

setlocal ENABLEDELAYEDEXPANSION
FOR /F "usebackq delims=" %%a IN ('wmic path Win32_NetworkAdapter where NetConnectionStatus="2" get NetConnectionID ^| find "одключ"') DO (set result=%%a)
echo %result%


Подскажите, как поправить чтобы корректно работал.

Iska
27-03-2020, 12:22
Но по какой-то причине < wmic path Win32_NetworkAdapter where NetConnectionStatus="2" get NetConnectionID | find "одключ" > в bat-нике работает некорректно: »
Например, по причине не той кодировки пакетного файла. У Вашего пакетного файла она какая?

И при использовании квалификатора «usebackq» используйте такие: `…` кавычки для команды, а не такие: '…'.

Wolf_46
27-03-2020, 13:34
Кодировка файла - 866

кавычки поправил, результат:

c:\Users\user\Desktop>5.bat

c:\Users\user\Desktop>setlocal ENABLEDELAYEDEXPANSION

c:\Users\user\Desktop>FOR /F "usebackq delims=" %a IN (`wmic path Win32_NetworkA
dapter where NetConnectionStatus "2" get NetConnectionID | find "одключ"`) DO (s
et result=%a )
Invalid Verb.

c:\Users\user\Desktop>echo
Режим вывода команд на экран (ECHO) включен.

Iska
27-03-2020, 16:56
Wolf_46, ещё раз покажите Ваш код (нынешний, исправленный).

Wolf_46
27-03-2020, 22:48
setlocal ENABLEDELAYEDEXPANSION
FOR /F "usebackq delims=" %%a IN (`wmic path Win32_NetworkAdapter where NetConnectionStatus="2" get NetConnectionID ^| find "одключ"`) DO (set result=%%a)
echo %result%




© OSzone.net 2001-2012