![]() |
Как записать в переменную результат выполнения команды?
Мне необходимо что-то подобное:
%переменная% := (результат команды hostname), чтобы можно было использовать значение переменной дальше в скрипте... Сейчас на ум приходит только hostname > file.ext , с последущим вычитыванием имени компьютера... |
%COMPUTERNAME% - стандартная переменная.
|
Petya V4sechkin, благодарю с переменной %COMPUTERNAME% результат достигнут.
Сразу проверить как-то не решился - результаты выполнения hostname и set computername несколько разнятся - это и смутило... А все-таки, можно ли в переменную "заталкивать" результат выполнения команды? |
Цитата:
Код:
@Echo Off |
Petya V4sechkin, Благодарю!
Если можно, хочу уточнить в чем разница между Echo !V! и Echo %V% ? |
MSI, !V! - связывание времени выполнения (включается с помощью EnableDelayedExpansion). Подробнее можно почитать в описании команды Set:
set /? Вообще в вашем примере работает и %V% (потому что подстановка значения не происходит внутри цикла (For) или условия (If)). |
Добрый день!
Нашел эту ветку на форуме, т.к. вопрос похожий, но посложнее. Есть вот такие строки Код:
NSLOOKUP %IPcomp% | FIND /i "Имя:" > C:\Script\OffComp\nslookup_.txt А дальше при помощи FOR я из переменной вытащу что мне необходимо. Подскажите как это можно реализовать? |
kyi13, Вам не нужно, чтобы «писалось в переменную»:
Код:
for /f "usebackq tokens=2 delims=:" %%i in ( |
Не буду плодить темы, напишу сюда
есть команда Snmputil.exe get 192.168.15.94 public .1.3.6.1.4.1.318.1.1.1.3.3.3.0 , которая выводит результат в виде двух строк Variable = .iso.org.dod.internet.private.enterprises.318.1.1.1.3.3.3.0 Value = Gauge32 2174 Необходимо выделить из результата четыре последние цифры , в данном случае число 2174. |
Код:
@echo off |
Дабы не создавать лишние темы спрошу здесь) Есть скрипт в котором именно с первого раза не выводятся данные при применении команды echo
Код:
@echo off Ради интереса оставил просто @echo %base_n% Получаю в первый раз: Режим вывода команд на экран (ECHO) отключен Второй раз получаю значение переменной. |
UPD: Вывел на прямую %%i и %%j и проблема ушла.
|
Код:
@echo off |
Спасибо за совет!
Цитата:
|
Цитата:
Код:
setlocal /? |
Чтобы не плодить темы, спрошу здесь.
Как присвоить переменной в батнике результат выполнения команды? Команда возвращает следующее: Код:
... |
Цитата:
Код:
for /f "usebackq delims=" %%i in ( Цитата:
|
Цитата:
P.S. не работает ваша конструкция. Вот это: Код:
fastboot getvar version 2> version Код:
comment=OPEN_ME572CL_V11.8.0.157.1 |
Попробуйте так:
Код:
@echo off |
Через запись в файл сделать получилось и всё работает.
Ваш вариант работать не хочет, хотя команда проходит. P.S. Сделал, всё оказалось просто: Код:
FOR /F "tokens=2" %%a IN ('fastboot getvar version 1^>nul 2^>^&3') do set build=%%a & goto :ver |
Ага. Я брал поновее версию. Но ни моя, ни Ваша без устройства работать не хотят :).
В предыдущем варианте я что-то перебдел. Попробуйте так: Код:
@echo off Код:
@echo off |
Естественно без устройства не работает =)
Но зато ваш последний вариант отлично работает! Спасибо за помощь. |
Есть команда
Код:
wmic.exe Process where "Name='Far.exe'" get WorkingSetSize Код:
WorkingSetSize Попробовал предложанные в теме форы, не получилось |
Код:
@Echo Off |
Если я правильно понял задачу (Powershell).
Код:
$p = Get-CimInstance win32_process -filter "name='far.exe'" | Select -ExpandProperty WorkingSetSize |
Есть такая буква!
Мне недавно тоже самое понадобилось и я сафсемвахуе был, когда понял что нету такой возм-сти в cmd-bat. Но оказалось что всё-таки можно и причем давно... но таким сопособом, что фиг додумаесся :yes: Способ нашелся тут пользуемся ;) Для случая Aquilo Код:
@echo off Код:
for /f "delims= tokens=* usebackq" %%i in (`"dir /b g:\"`) do @if not X%%i==X set FILES=!FILES! %%i |
Всем привет!
Не стал плодить темы, моя задача немного схожа, мне нужно осуществить поиск мест где находится файл, создал скрипт: @echo off setlocal EnableDelayedExpansion For /F "Delims=" %%I In ('where /r d:\ "filename"') Do Set filename=%%~I echo "%computername%"; !filename! > where.csv Но, проблема в том что на выходе получаю только путь до последнего найденного файла, а их несколько, подскажите - как осуществить вывод всех найденных? Спасибо! |
Runn3r,
сразу и записывать в файл, зачем там переменная: Код:
@echo off |
Код:
>"where.csv" ( Цитата:
|
Цитата:
|
alpap, спасибо, ясно.
|
Спасибо всем за помощь.
Не получается сделать в одну строчку, мне нужно будет использовать where для нескольких, разных файлов и чтобы в начале прописывалось имя компьютера: %computername%;filename1;filename2 и тд @echo off >where.csv echo %computername% && (For /F "Delims=" %%I In ('where /r d:\ "filename1"') Do @<nul set /p="%%~I;") && (For /F "Delims=" %%I In ('where /r d:\ "filename2"') Do @<nul set /p="%%~I;") pause Еще такой вопрос реально ли вообще вывести путь от куда запущены текущие java.exe процессы, без вывода аргументов с которыми он стартован? Пробовал через wmic с выводом commandline - путь указывает, но еще и указывает кучу не нужных аргументов с которыми стартован процесс ((( В итоге хотел бы получить такую информацию: %computername%;filename1;filename2;all_java.exe_process_path Заранее огромное спасибо! |
Runn3r, так Вам как надо-то? В моём понимании или в понимании коллеги alpap? Такой:
Код:
ComputerName;c:\Windows\notepad.exe Код:
ComputerName;c:\Windows\notepad.exe;c:\Windows\System32\notepad.exe;c:\Windows\SysWOW64\notepad.exe Цитата:
Код:
where.exe /r c:\ "notepad.exe" "calc.exe" "regedit.exe" Скрытый текст
![]() |
нужно чтобы информация выводилась в строку
|
Runn3r, значит, используйте вариант коллеги alpap. Как указать несколько масок зараз — сообщением выше.
Цитата:
|
Цитата:
|
Надо полагать, Вы подразумеваете под этим путь к исполняемому файлу.
Код:
@echo off |
Здравствуйте.
Нужно передать в скрипт переменную залогиненного пользователя. Узнать кто залогинился можно командой WMIC /NODE: "localhost" COMPUTERSYSTEM GET USERNAME На выходе получается Код:
UserName Попробовал из того что выложено на форуме - не помогло. Код:
FOR /F "usebackq skip=1 delims=" %%I IN (`WMIC /NODE: "localhost" COMPUTERSYSTEM GET USERNAME`) DO Set /P S=%%I |
vdvas, возможно, Ваша проблема (для локальной машины) решается проще:
Код:
echo %userdomain% |
Я на удаленной машине выполняю скрипт через psexec с ключом s, таким образом %username% здесь будет СИСТЕМА.
Поэтому такие системные переменные не годятся. |
Ясно. Тогда следовало бы упомянуть данное:
Цитата:
Код:
@echo off |
Цитата:
Код:
@echo off |
Не нашел точно подходящую тему относительно поставленной для .bat-файла задачи, поэтому пишу здесь (если все-же есть такая тема, просьба перенести мой пост туда).
Задача у меня такая. Имеется сайт на котором несколько тв-каналов. С них каждые 2 часа нужно извлекать их видеопотоки и вставлять в плейлист IPTV (каждые 2 часа потому, что таков срок живучести ссылок с данного сайта). Вручную выполнять эту задачу несколько раз в день утомительно (хотя сами потоки я умею извлекать). Поэтому подумал, может есть возможность написать .bat-файл, который будет выполнять эту задачу вместо меня. Пожалуйста дайте направление как это делается. Замечу, что такое реализовано в видеодополнениях приложения Kodi (для Android устройств), где ссылки обновляются на лету. Однако все эти скрипты для меня непостижимы. Потому решил спросить тут. Кто-нибудь может помочь? |
монтировку для извлечения потоков в планировщик под предел <= 2часа
|
Есть программа, работает с флешки. Для обновления собственных баз запускается с ключами. Запуск идет через батник в котором формируется среда и временные папки. Некоторое время назад после очередного обновления, программа стала реагировать на состояние USB портов. Если в порт что то вставить или вынуть, она уходит из под контроля скрипта(проверял в CMD и VBS), а скрипт продолжает свою работу: очищает или удаляет временные папки и файлы, соответственно работа программы завершается. Нашел выход в следующем: после строки запуска поставил цикл в котором отслеживается PID программы пока она находится в процессах, но не могу понять, как получить errorlevel для заключительных операций. Запуск может проходить сразу с нескольких флешек. Донести проблему до разработчика нереально - скорее всего аутсорсинг. Может кто знает как получить код возврата, отпишитесь пожалуйста.
|
Unter, расскажите то же самое, только теперь предметно.
|
Проще говоря, можно как нибудь получить код возврата программы, если скрипт не ждет ее завершения.
|
Unter, первый вопрос — как он определит момент, когда пора получать код возврата?
Вы явно не тем занимаетесь. Надо решать: Цитата:
|
Цитата:
Цитата:
|
Unter, покажите Ваш код, в котором:
Цитата:
|
Спасибо всем кто пытался разобраться в моей "компетентности". Я нашел решение, возможно временное, но рабочее. Оно вытекает из логики запуска данного приложения. Запуск происходит EXE файлом небольшого размера, который делает первичные проверки и настройки и запускает рядом лежащий файл, который на самом деле является основным исполняемым модулем и прекрасно запускается через start. Видимо стартовый экзешник зачем то сканирует состояние USB устройств и при этом либо закрывается(пока не проверял), либо меняет свое состояние и скрипт начинает считать, что программа завершила работу, хотя основной модуль находится в памяти. Эх если бы это разработчикам донести.
|
Цитата:
Как минимум, необходимо увидеть строку: Цитата:
а вообще, в cmd, есть команда start, у которой есть ключ WAIT Цитата:
|
Идет именно формирование среды - переменная %TEMP% и каталоги в ней ну и неужели вы думаете что я про старт /wait не знаю, хотя в батниках можно и без нее обходиться. Ну а в VBS запуск шел через CreateObject("WScript.Shell").run
|
Unter, причём тут Ваша компетентность? Речь идёт о воспроизводимости.
|
Цитата:
"Секретную" строчку Вы показывать не желаете... соответственно, помочь вам, пока нечем. Ну, кроме как поговорить на общие темы... но это уже во флейм. |
Здравствуйте.
Предстоит на большом количестве ПК с 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 Подскажите, как поправить чтобы корректно работал. |
Цитата:
И при использовании квалификатора «usebackq» используйте такие: `…` кавычки для команды, а не такие: '…'. |
Кодировка файла - 866
кавычки поправил, результат: Код:
c:\Users\user\Desktop>5.bat |
Wolf_46, ещё раз покажите Ваш код (нынешний, исправленный).
|
Код:
setlocal ENABLEDELAYEDEXPANSION |
Wolf_46, А если так?
Код:
setlocal ENABLEDELAYEDEXPANSION Оказывается, символ '=' тоже надо экранировать...
Код:
FOR /F "usebackq delims=" %%a IN (`echo =4=4=`) DO (set result=%%a ) Код:
result:4 4 |
Попробуйте так:
Код:
@echo off Цитата:
|
iglezz, Iska, спасибо!, оба Ваши варианта работают. :up
|
F как сие сделать с результатом вывода api в curl?
|
Покажите, что у Вас есть сейчас.
|
Время: 07:35. |
Время: 07:35.
© OSzone.net 2001-