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
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%
>output.tmp echo Hello >>output.tmp echo world <output.tmp ( set /p line1= set /p line2= ) echo %line1% echo %line2%
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% 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
~ Answered on 2013-02-19 19:09:15