Jean-François Fabre
Jean-François Fabre

Reputation: 140188

windows oneliner to set a command output in an environment variable

As stated here Is it possible to set an environment variable to the output of a command in cmd.exe I always used that

mycommand.exe>%TEMP%\out.txt
set /P FOO=<%TEMP%\out.txt

But that's ugly because it creates a file.

The for method is better but complicated

I wanted something simple a la unix, like:

mycommand.exe|set /P FOO=

No error, but FOO is not set after I run that.

Why is this not working?

Upvotes: 1

Views: 99

Answers (1)

Filipus
Filipus

Reputation: 540

Best way I can think of doing this would be to create your own little batch file that silently uses the FOR construct. For instance, you could create a batch named BatchSet.bat, stored somewhere on your path. The batch would contain the following code:

@Echo off
for /f "delims=" %%i in ('%2') do set %1=%%i
Set %1

If you run this with the following command:

BatchSet MyVar whoami

You'll get something like:

MyVar=servername\John

Obviously, the command you run should limit its output to a single line to be stored properly in the environment variable. For instance, if you run it like this:

BatchSet MyVar Vol

Then you'll only get the first line of the Vol command's output

MyVar= Volume on drive C is labeled MyDisk

But all in all, it's a fairly elegant way of doing what you were looking for.

Note that the last line in the batch is simply there to provide visual output. It can be removed altogether.

Upvotes: 2

Related Questions