Показать полную графическую версию : [решено] Как записать в переменную результат выполнения команды?
Ясно. Тогда следовало бы упомянуть данное:
на удаленной машине выполняю скрипт »
условие зараз. Равно как и причину, по которой Вы пользуете 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 устройств), где ссылки обновляются на лету. Однако все эти скрипты для меня непостижимы. Потому решил спросить тут. Кто-нибудь может помочь?
монтировку для извлечения потоков в планировщик под предел <= 2часа
Есть программа, работает с флешки. Для обновления собственных баз запускается с ключами. Запуск идет через батник в котором формируется среда и временные папки. Некоторое время назад после очередного обновления, программа стала реагировать на состояние USB портов. Если в порт что то вставить или вынуть, она уходит из под контроля скрипта(проверял в CMD и VBS), а скрипт продолжает свою работу: очищает или удаляет временные папки и файлы, соответственно работа программы завершается. Нашел выход в следующем: после строки запуска поставил цикл в котором отслеживается PID программы пока она находится в процессах, но не могу понять, как получить errorlevel для заключительных операций. Запуск может проходить сразу с нескольких флешек. Донести проблему до разработчика нереально - скорее всего аутсорсинг. Может кто знает как получить код возврата, отпишитесь пожалуйста.
Unter, расскажите то же самое, только теперь предметно.
Проще говоря, можно как нибудь получить код возврата программы, если скрипт не ждет ее завершения.
Unter, первый вопрос — как он определит момент, когда пора получать код возврата?
Вы явно не тем занимаетесь. Надо решать:
Некоторое время назад после очередного обновления, программа стала реагировать на состояние USB портов. Если в порт что то вставить или вынуть, она уходит из под контроля скрипта »
как он определит момент, когда пора получать код возврата »
после строки запуска поставил цикл в котором отслеживается PID программы пока она находится в процессах »
Как уже писал выше: "Донести проблему до разработчика нереально". И предупреждая следующий вопрос, проблема не в компьютере и не в Windows. Проверял на 10-ке и 7-ке, хотя поначалу грешил на 10 и даже Microsoft потревожил, но затем проверил на других компьютерах и убедился, что виновата программа. Возможно есть способ выгрузить код в файл.
Unter, покажите Ваш код, в котором:
она уходит из под контроля скрипта(проверял в CMD и VBS), »
Спасибо всем кто пытался разобраться в моей "компетентности". Я нашел решение, возможно временное, но рабочее. Оно вытекает из логики запуска данного приложения. Запуск происходит EXE файлом небольшого размера, который делает первичные проверки и настройки и запускает рядом лежащий файл, который на самом деле является основным исполняемым модулем и прекрасно запускается через start. Видимо стартовый экзешник зачем то сканирует состояние USB устройств и при этом либо закрывается(пока не проверял), либо меняет свое состояние и скрипт начинает считать, что программа завершила работу, хотя основной модуль находится в памяти. Эх если бы это разработчикам донести.
Спасибо всем кто пытался разобраться в моей "компетентности". »
Дело не в "разбирательствах о компетентности". Просто анализ выданной информации и поиск решения, будет сродни "гаданию на кофейной гуще" и результат, естественно, получится соответствующий... он такой нужен вам? :)
Как минимум, необходимо увидеть строку:
Запуск идет через батник »
т.е. не предварительные действия, по формированию среды и каталогов, а именно запуск программы, а также, надо бы уточнить, более конкретные действия, которые должны выполняться по завершению программы...
а вообще, в cmd, есть команда start, у которой есть ключ WAIT
WAIT Запуск приложения с ожиданием его завершения.
или же, непосредственный запуск программы, тоже должен происходить с ожиданием завершения, т.е. скрипт, от строки запуска, не будет выполняться пока не завершится та программа.
Идет именно формирование среды - переменная %TEMP% и каталоги в ней ну и неужели вы думаете что я про старт /wait не знаю, хотя в батниках можно и без нее обходиться. Ну а в VBS запуск шел через CreateObject("WScript.Shell").run
Unter, причём тут Ваша компетентность? Речь идёт о воспроизводимости.
ну и неужели вы думаете что я про старт /wait не знаю »
Понимаете, телепатия - моя не самая сильная сторона, а гадания на кофейной гуще очень плохо получаются... :)
"Секретную" строчку Вы показывать не желаете... соответственно, помочь вам, пока нечем. Ну, кроме как поговорить на общие темы... но это уже во флейм.
Здравствуйте.
Предстоит на большом количестве ПК с 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%
Подскажите, как поправить чтобы корректно работал.
Но по какой-то причине < wmic path Win32_NetworkAdapter where NetConnectionStatus="2" get NetConnectionID | find "одключ" > в bat-нике работает некорректно: »
Например, по причине не той кодировки пакетного файла. У Вашего пакетного файла она какая?
И при использовании квалификатора «usebackq» используйте такие: `…` кавычки для команды, а не такие: '…'.
Кодировка файла - 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) включен.
Wolf_46, ещё раз покажите Ваш код (нынешний, исправленный).
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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.