Как настроить вывод команд в виде переменной в командном файле - PullRequest
169 голосов
/ 15 июня 2011

Можно ли установить выходные данные оператора пакетного файла в переменную, например:

findstr testing > %VARIABLE%

echo %VARIABLE%

Ответы [ 8 ]

226 голосов
/ 15 июня 2011
FOR /F "tokens=* USEBACKQ" %%F IN (`command`) DO (
SET var=%%F
)
ECHO %var%

Я всегда использую USEBACKQ, так что если у вас есть строка для вставки или длинное имя файла, вы можете использовать двойные кавычки, не испортив команду.

Теперь, если ваш вывод будет содержать несколько строк, вы можете сделать это

SETLOCAL ENABLEDELAYEDEXPANSION
SET count=1
FOR /F "tokens=* USEBACKQ" %%F IN (`command`) DO (
  SET var!count!=%%F
  SET /a count=!count!+1
)
ECHO %var1%
ECHO %var2%
ECHO %var3%
ENDLOCAL
54 голосов
/ 15 июня 2011

Я нашел эту тему на этой вещи в Интернете. Сводится к:

@echo off 
setlocal enableextensions 
for /f "tokens=*" %%a in ( 
'VER' 
) do ( 
set myvar=%%a 
) 
echo/%%myvar%%=%myvar% 
pause 
endlocal 

Вы также можете перенаправить вывод команды во временный файл, а затем поместить содержимое этого временного файла в вашу переменную likesuchashereby:

cmd > tmpFile 
set /p myvar= < tmpFile 
del tmpFile 

Благодарю ветку Тома за аппаратное обеспечение.

27 голосов
/ 23 января 2018

в одной строке:

FOR /F "tokens=*" %g IN ('*your command*') do (SET VAR=%g)

вывод команды будет установлен в% g, а затем в VAR.

Дополнительная информация: https://ss64.com/nt/for_cmd.html

18 голосов
/ 08 июля 2015

Чтобы прочитать файл ...

set /P Variable=<File.txt

Написать файл

@echo %DataToWrite%>File.txt

примечание; пробелы перед символом <> приводят к добавлению пробела в конец переменной, также

Чтобы добавить в файл, как программа-регистратор, Сначала создайте файл с одним ключом ввода с именем e.txt

set /P Data=<log0.log
set /P Ekey=<e.txt
@echo %Data%%Ekey%%NewData%>log0.txt

ваш журнал будет выглядеть так

Entry1
Entry2 

и т. Д.

В любом случае, пара полезных вещей

2 голосов
/ 11 мая 2019

Все эти ответы были так близки к ответу, который мне был нужен.Это попытка расширить их.

В пакетном файле

Если вы работаете из файла .bat и вам нужна одна строка, которая позволяет экспортировать сложный файлвведите, например, jq -r ".Credentials.AccessKeyId" c:\temp\mfa-getCreds.json переменную с именем AWS_ACCESS_KEY, тогда вам понадобится:

FOR /F "tokens=* USEBACKQ" %%g IN (`jq -r ".Credentials.AccessKeyId" c:\temp\mfa-getCreds.json`) do (SET "AWS_ACCESS_KEY=%%g")

В командной строке

Если вы в приглашении C:\, вы хотите одинстрока, которая позволяет вам выполнить сложную команду, такую ​​как jq -r ".Credentials.AccessKeyId" c:\temp\mfa-getCreds.json, для переменной с именем AWS_ACCESS_KEY, тогда вы захотите следующее:

FOR /F "tokens=* USEBACKQ" %g IN (`jq -r ".Credentials.AccessKeyId" c:\temp\mfa-getCreds.json`) do (SET "AWS_ACCESS_KEY=%g")

Пояснение

Единственная разница между двумя ответами вышечто в командной строке вы используете один% в вашей переменной.В пакетном файле вы должны удвоить процентные знаки (%%).

Поскольку команда включает в себя двоеточия, кавычки и скобки, необходимо включить строку USEBACKQ в параметрах, чтобыВы можете использовать обратные кавычки, чтобы указать команду для запуска, а затем всевозможные забавные символы внутри нее.

2 голосов
/ 04 августа 2017
cd %windir%\system32\inetsrv

@echo off

for /F "tokens=* USEBACKQ" %%x in (      
        `appcmd list apppool /text:name`
       ) do (
            echo|set /p=  "%%x - " /text:name & appcmd.exe list apppool "%%x" /text:processModel.identityType
       )

echo %date% & echo %time%

pause
0 голосов
/ 17 сентября 2015

Надеюсь, что эта помощь

set a=%username%
echo %a%    
set a="hello"
echo %a%
0 голосов
/ 20 августа 2014

Я проверил это так, и это сработало:

SET /P Var= | Cmd

Путем передачи команды в переменную, приглашение вставит результат команды "Cmd" в переменную "Var".

Обновление:

Это не работает, мой плохой, скрипт, который я сделал, был таким:

SET /P Var= | dir /b *.txt
echo %Var%

Это действительно показывалоскажем, "test.txt", но на самом деле это был результат команды "dir /b *.txt", а не echo %var%.Я запутался, так как оба выхода были одинаковыми.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...