배치 파일의 명령문 출력을 변수로 설정할 수 있습니까? 예를 들면 다음과 같습니다.
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
