[windows] 배치 파일에서 명령 출력을 변수로 설정하는 방법

배치 파일의 명령문 출력을 변수로 설정할 수 있습니까? 예를 들면 다음과 같습니다.

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

명령 출력을 임시 파일로 리디렉션 한 다음 해당 임시 파일의 내용을 변수 등의 변수에 넣을 수도 있습니다. 여러 줄 입력에서는 작동하지 않습니다.

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

Tom ‘s 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라는 단일 Enter 키를 사용하여 파일을 만듭니다.

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되므로 백 따옴표를 사용하여 실행할 명령을 지정하고 그 안에 모든 종류의 재미있는 문자를 지정할 수 있도록 옵션에 행 을 포함해야 합니다.


답변

임시 파일로 출력하지 않고 변수를 읽으려면 명령의 결과를 변수에 직접 저장합니다.

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, tokens또는 usebackq에서 for루프.

Win 10 CMD에서 테스트되었습니다.


답변

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