Set output of a command as a variable (with pipes)

前端 未结 6 1119
花落未央
花落未央 2020-12-01 05:09

Can you redirect the output of a command to a variable with pipes?

I haven\'t tried much as I haven\'t been able to think of anything to try, but I have tried one me

6条回答
  •  暗喜
    暗喜 (楼主)
    2020-12-01 05:36

    Your way can't work for two reasons.

    You need to use set /p text= for setting the variable with user input.
    The other problem is the pipe.
    A pipe starts two asynchronous cmd.exe instances and after finishing the job both instances are closed.

    That's the cause why it seems that the variables are not set, but a small example shows that they are set but the result is lost later.

    set myVar=origin
    echo Hello | (set /p myVar= & set myVar)
    set myVar
    

    Outputs

    Hello
    origin
    

    Alternatives: You can use the FOR loop to get values into variables or also temp files.

    for /f "delims=" %%A in ('echo hello') do set "var=%%A"
    echo %var%
    

    or

    >output.tmp echo Hello
    >>output.tmp echo world
    
    

    Alternative with a macro:

    You can use a batch macro, this is a bit like the bash equivalent

    @echo off
    
    REM *** Get version string 
    %$set% versionString="ver"
    echo The version is %versionString[0]%
    
    REM *** Get all drive letters
    `%$set% driveLetters="wmic logicaldisk get name /value | findstr "Name""
    call :ShowVariable driveLetters
    

    The definition of the macro can be found at
    SO:Assign output of a program to a variable using a MS batch file

提交回复
热议问题