Можно ли, например, задать переменную на выходе оператора' пакетного файла:
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
Вы также можете перенаправить вывод команды во временный файл, а затем поместить содержимое этого временного файла в переменную likeuchashereby:
cmd > tmpFile
set /p myvar= < tmpFile
del tmpFile
Зачет по теме на Tom's Hardware.
в одну строку:
FOR /F "tokens=*" %g IN ('*your command*') do (SET VAR=%g)
вывод команды будет установлена в %G, затем в дисп.
Больше информаций: 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
и так далее
В любом случае пару полезных вещей
Эти ответы были так близки к ответу, что мне нужно. Это попытка расширить их.
Если вы'вновь работает изнутри .бат-файл, и вы хотите одной строкой, что позволяет экспортировать сложную команду
jq не -р и".Учетные данные.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")
Если вы'вновь В С:\
предложит вам хочу одну линию, что позволяет запускать сложные команды, как jq не -р и".Учетные данные.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 `в параметрах, так что вы можете использовать backquotes указать команду для запуска, а затем всех видов забавных персонажей внутри него.
Если вы Don'т хотим, чтобы вывод во временный файл, а затем прочитать в переменную, этот код сохраняет результат команды в переменную:
FOR /F %i IN ('findstr testing') DO set VARIABLE=%i
echo %VARIABLE%
Если вы хотите заключить строку поиска в двойные кавычки:
FOR /F %i IN ('findstr "testing"') DO set VARIABLE=%i
Если вы хотите сохранить этот код в пакетный файл, добавить дополнительный символ%:
FOR /F %%i IN ('findstr "testing"') DO set VARIABLE=%%i
Полезный пример для подсчета количества файлов в &амп каталога; хранить в переменной: (иллюстрирует трубопроводов)
FOR /F %i IN ('dir /b /a-d "%cd%" ^| find /v /c "&"') DO set /a count=%i
Обратите внимание на использование одинарных кавычек вместо двойных кавычек " или могилы \ акцентв командной скобки. Это чистой альтернативой
delims,
маркерыили
usebackqв
для` петли.
Тестировалась на Win 10 УМК.
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
Я протестировал его в таком виде, и он сработал:
SET /P Var= | Cmd
Передав команду в переменную, prompt вставит результат команды "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%