У мене є легкий .bat файл
%2 >file.tmp
set /p %1=<file.tmp
Я сподіваюся використовувати цей сценарій таким чином:
putVar var1 command.bat
Він повинен отримати перший рядок виводу command.bat у змінну var1 і після цього я повинен мати можливість використовувати var1 змінну, наприклад
putVar var1 command.bat
echo %var1%
На жаль, це не працює. Як отримати цю роботу? Можливо, є якийсь простіший спосіб?
Відповіді:
0 для відповіді № 1Ваша проблема полягає в тому, що у вашому зразку коду запущена команда (command.bat
) - пакетний файл, який викликається з пакетного файлу, і якщо з пакетного файлу ви викликаєте інший пакетний файл без call
команду, тоді виконання не повертається до пакету абонента.
Щоб зберегти синтаксис, можна використовувати
(cmd /c "%~2")>file.tmp
set /p "%~1="<file.tmp
нерест другого екземпляра cmd
обробляти команду, перенаправляючи її вивід до тимчасового файлу, а потім читаючи файл (тільки перший рядок command.bat
виведення) у змінну.
Простіше це зробити for /f
for /f "delims=" %%a in ("%~2") do set "%~1=%%a"
які, більш-менш, виконують ту ж роботу. Запустіть команду вилучення виводу і, в цьому випадку, перегляньте вихід команди команди, призначивши кожному з рядків command.bat
вивести на змінну. Очевидно, що всередині змінної буде збережено лише останній рядок, оскільки цикл перезапише його значення в кожній ітерації.