Подтвердить что ты не робот

Как установить команды вывода в виде переменной в пакетном файле

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

findstr testing > %VARIABLE%

echo %VARIABLE%
4b9b3361

Ответ 1

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

Ответ 2

Я нашел этот поток о том, что там Interweb вещь. Откидывается до:

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

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

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

Кредит на тему Tom Hardware.

Ответ 3

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

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

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

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

Ответ 4

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

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 

и т.д.

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

Ответ 5

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

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

Если вы работаете из файла .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 в параметры, чтобы можно было использовать USEBACKQ для указания команды для запуска, а затем всевозможные забавные символы внутри нее.

Ответ 6

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

Ответ 7

Если вы не хотите выводить во временный файл, а затем читать в переменную, этот код сохраняет результат команды непосредственно в переменной:

FOR /F "delims=" %i IN ('findstr testing') DO set VARIABLE=%i
echo %VARIABLE%

Если вы хотите заключить строку поиска в двойные кавычки:

FOR /F "delims=" %i IN ('findstr "testing"') DO set VARIABLE=%i

Если вы хотите сохранить этот код в пакетном файле, добавьте дополнительный символ%:

FOR /F "delims=" %%i IN ('findstr "testing"') DO set VARIABLE=%%i

Полезный пример для подсчета количества файлов в каталоге & сохранить в переменной: (иллюстрирует pipeопровод)

FOR /F "delims=" %i IN ('dir /b /a-d "%cd%" ^| find /v /c "&"') DO set /a count=%i

Обратите внимание на использование одинарных кавычек вместо двойных кавычек "или серьезного ударения" в скобках команды. Это альтернатива tokens или usebackq в цикле for.

Проверено на Win 10 CMD.

Ответ 8

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

SET /P Var= | Cmd

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

Обновить:

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

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

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

Ответ 9

Надеемся на эту помощь

set a=%username%
echo %a%    
set a="hello"
echo %a%