배치 파일에서 명령 출력을 변수로 설정하는 방법
배치 파일의 명령문 출력을 변수로 설정할 수 있습니까? 예를 들면 다음과 같습니다.
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")
설명
The only difference between the two answers above is that on the command line, you use a single % in your variable. In a batch file, you have to double up on the percentage signs (%%).
Since the command includes colons, quotes, and parentheses, you need to include the USEBACKQ
line in the options so that you can use backquotes to specify the command to run and then all kinds of funny characters inside of it.
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
If you don't want to output to a temp file and then read into a variable, this code stores result of command direct into a variable:
FOR /F "delims=" %i IN ('findstr testing') DO set VARIABLE=%i
echo %VARIABLE%
If you want to enclose search string in double quotes:
FOR /F "delims=" %i IN ('findstr "testing"') DO set VARIABLE=%i
If you want to store this code in a batch file, add an extra % symbol:
FOR /F "delims=" %%i IN ('findstr "testing"') DO set VARIABLE=%%i
A useful example to count the number of files in a directory & store in a variable: (illustrates piping)
FOR /F "delims=" %i IN ('dir /b /a-d "%cd%" ^| find /v /c "&"') DO set /a count=%i
Note the use of single quotes instead of double quotes " or grave accent ` in the command brackets. This is alternative to tokens
or usebackq
in for
loop.
Tested on Win 10 CMD.
I have tested it like this and it worked:
SET /P Var= | Cmd
By piping the command into a variable, prompt will insert the result of command "Cmd
" into the variable "Var
".
Update:
It doesn't work, my bad, the script i did was this:
SET /P Var= | dir /b *.txt
echo %Var%
It was actually showing let's say "test.txt
", but it was in fact showing the result of the "dir /b *.txt
" command, not the echo %var%
. I got confused since both outputs were the same.
Hope this help
set a=%username%
echo %a%
set a="hello"
echo %a%
참고URL : https://stackoverflow.com/questions/6359820/how-to-set-commands-output-as-a-variable-in-a-batch-file
'development' 카테고리의 다른 글
파일 경로를 파일 URI로 변환 하시겠습니까? (0) | 2020.05.13 |
---|---|
Cloud Firestore와 Firebase 실시간 데이터베이스의 차이점은 무엇입니까? (0) | 2020.05.13 |
npm을 사용하여 모듈을 전체적으로 설치하려면 어떻게합니까? (0) | 2020.05.13 |
빈 괄호가있는 기본 생성자 (0) | 2020.05.13 |
C ++에서 "super"사용 (0) | 2020.05.13 |