<xxx.bat>

setlocal

java -version 2>&1 | find "version" > test.log

set /p test=<test.log

echo.build %test%
del test.log

 

or

 

<xxx.bat>

for /f "delims=" %%A in ('java -version 2^>^&1 ^| find "version"') do (set test=%%A)

echo.build %test%

 

 

<실행결과>

build java version "1.8.0_73"



출처: http://bigot.tistory.com/143 



D:\> FOR /F "delims=" %i IN ('date /t') DO set today=%i

D:\> echo %today%

Sat 20/09/2008



"delims=" 는 기본 공백 및 탭 구분 기호를 덮어 쓰므로 date 명령의 출력이 한꺼번에 처리됩니다.


멀티 라인 출력을 캡쳐하기 위해, 여전히 본질적으로 한 줄짜리 변수가 될 수 있습니다 (변수 lf를 결과 변수의 구분 기호로 사용).


REM NB:in a batch file, need to use %%i not %i

setlocal EnableDelayedExpansion

SET lf=-

FOR /F "delims=" %%i IN ('dir \ /b') DO if ("!out!"=="") (set out=%%i) else (set out=!out!%lf%%%i)

ECHO %out%

파이프 된 표현식을 캡처하려면 ^| :


FOR /F "delims=" %%i IN ('svn info . ^| findstr "Root:"') DO set "URL=%%i"

 Question

Windows 배치 스크립트 변수로 명령의 결과를 얻으려고합니다 . bash 스크립팅에 해당 하는 명령에 대한 bash 명령의 결과를 얻는 방법을 참조하십시오. .bat 파일에서 작동하는 솔루션이 선호되지만 다른 일반적인 Windows 스크립트 솔루션도 환영합니다.




FOR 명령의 결과를 사용하십시오. 예를 들어 (배치 파일 내부) :


for /F "delims=" %%I in ('dir /b /a-d /od FILESA*') do (echo %%I)

%%I 를 원하는 값으로 사용할 수 있습니다. 다음과 같이하십시오. %%I


그리고 미리 %%I 에는 공백이나 CR 문자가 없으므로 비교에 사용할 수 있습니다!




위의 해결 방법에 대한 설명을 추가하고 싶습니다.


커맨드가 경로 내에 있거나 명령이 공백이나 특수 문자가없는 cmdpath 인 경우 이러한 모든 구문이 완벽하게 작동합니다.


그러나 경로에 특수 문자가 들어있는 폴더에있는 실행 가능 명령을 사용하려고하면 명령 경로를 큰 따옴표 ( ")로 묶어야하며 FOR / F 구문이 작동하지 않습니다.


예 :


$ for /f "tokens=* USEBACKQ" %f in (

    `""F:\GLW7\Distrib\System\Shells and scripting\f2ko.de\folderbrowse.exe"" Hello '"F:\GLW7\Distrib\System\Shells and scripting"'`

) do echo %f

The filename, directory name, or volume label syntax is incorrect.

또는


$ for /f "tokens=* USEBACKQ" %f in (

      `"F:\GLW7\Distrib\System\Shells and scripting\f2ko.de\folderbrowse.exe" "Hello World" "F:\GLW7\Distrib\System\Shells and scripting"`

) do echo %f

'F:\GLW7\Distrib\System\Shells' is not recognized as an internal or external command, operable program or batch file.

또는


`$ for /f "tokens=* USEBACKQ" %f in (

     `""F:\GLW7\Distrib\System\Shells and scripting\f2ko.de\folderbrowse.exe"" "Hello World" "F:\GLW7\Distrib\System\Shells and scripting"`

) do echo %f

'"F:\GLW7\Distrib\System\Shells and scripting\f2ko.de\folderbrowse.exe"" "Hello' is not recognized as an internal or external command, operable program or batch file.

이 경우, 명령을 사용하여 결과를 변수에 저장하는 유일한 해결책은 기본 디렉토리를 명령 자체 중 하나에 (임시적으로) 설정하는 것입니다.


pushd "%~d0%~p0"

FOR /F "tokens=* USEBACKQ" %%F IN (

    `FOLDERBROWSE "Hello world!" "F:\GLW7\Distrib\System\Layouts (print,display...)"`

) DO (SET MyFolder=%%F)

popd

echo My selected folder: %MyFolder%

그 결과는 정확합니다.


My selected folder: F:\GLW7\Distrib\System\OS install, recovery, VM\

Press any key to continue . . .

물론 위의 예에서 "% ~ d0 % ~ p0"구문을 사용할 수 있도록 내 일괄 처리 스크립트가 실행 가능 명령과 동일한 폴더에 있다고 가정합니다. 이것이 사용자의 경우가 아니라면 명령 경로를 찾고 경로의 기본 디렉토리를 변경하는 방법을 찾아야합니다.


NB : 궁금한 사람들을 위해 여기에서 (폴더를 선택하기 위해) 사용 된 샘플 명령은 FOLDERBROWSE.EXE입니다. 웹 사이트 f2ko.de ( http://f2ko.de/en/cmd.php )에서 찾았습니다.


누군가 복잡한 경로를 통해 접근 할 수있는 그런 종류의 명령에 대해 더 나은 해결책을 가지고 있다면, 나는 그것을 듣기 매우 기뻐할 것입니다.





매개 변수 /P 와 함께 SET 명령을 사용하여 출력을 지시해야합니다. 예를 들어 http://www.ss64.com/nt/set.html 참조 http://www.ss64.com/nt/set.html . .BAT 파일에 대해 확실하지 않은 CMD에서 작동합니다.


이 게시물에 대한 의견에서 :


이 링크에는 " Set /P _MyVar=<MyFilename.txt " MyFilename.txt 있습니다. MyFilename.txt 의 첫 번째 줄에 _MyVar 를 설정합니다. 이것은 " myCmd > tmp.txt "와 " set /P myVar=<tmp.txt "로 사용될 수 있습니다. 그러나 모든 출력이 아닌 출력의 첫 번째 줄만 가져옵니다.




bash에서 인수로 명령 결과 사용에 제공된 솔루션을 찾으 십니까?


다음은 코드입니다.


@echo off

if not "%1"=="" goto get_basename_pwd

for /f "delims=X" %%i in ('cd') do call %0 %%i

for /f "delims=X" %%i in ('dir /o:d /b') do echo %%i>>%filename%.txt

goto end


:get_basename_pwd

set filename=%~n1


:end