Можно ли установить вывод команды командного файла в переменную, например:
findstr testing > %VARIABLE%
echo %VARIABLE%
Можно ли установить вывод команды командного файла в переменную, например:
findstr testing > %VARIABLE%
echo %VARIABLE%
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
Я нашел этот поток о том, что там 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.
в одной строке:
FOR /F "tokens=*" %g IN ('*your command*') do (SET VAR=%g)
выход команды будет установлен в% g, затем в VAR.
Дополнительная информация: https://ss64.com/nt/for_cmd.html
Чтобы прочитать файл...
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
и т.д.
В любом случае пара полезных вещей
Эти ответы были настолько близки к ответу, что мне был нужен. Это попытка расширить их.
Если вы работаете из файла .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
для указания команды для запуска, а затем всевозможные забавные символы внутри нее.
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
Если вы не хотите выводить во временный файл, а затем читать в переменную, этот код сохраняет результат команды непосредственно в переменной:
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.
Я проверил это так, и это сработало:
SET /P Var= | Cmd
Путем передачи команды в переменную, запрос вставит результат команды " Cmd
" в переменную " Var
".
Обновить:
Это не работает, мой плохой, сценарий, который я сделал, был таким:
SET /P Var= | dir /b *.txt
echo %Var%
На самом деле он показывал, скажем, " test.txt
", но на самом деле показывал результат команды " dir/b *.txt
", а не echo %var%
. Я запутался, так как оба выхода были одинаковыми.
Надеемся на эту помощь
set a=%username%
echo %a%
set a="hello"
echo %a%