development

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

big-blog 2020. 5. 13. 20:46
반응형

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


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

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

반응형