web-dev-qa-db-ja.com

Windows cmdの環境変数を一時的に設定して、プログラムを1行で実行しますか?

コマンドプロンプトからのWindows環境変数の設定と取得? を見ましたが、私の質問は少し異なります。

端末プログラムがあるとしましょう、myprogram.c-> myprogram.exe、環境変数を読み取ります。いう:

...
char *valueMYVAR = getenv("MYVAR");
printf("MYVAR is %s\r\n", (valueMYVAR==NULL)?"":valueMYVAR );
...

ここで、Linux bashを使用している場合、次のように、コマンドラインで書き込むだけで、プログラムを実行するために、環境変数を一時的に設定できます。

$ MYVAR=1 ./myprogram.exe

Windowsコマンドプロンプト(cmd.exe)?私が試してみました:

> SET MYVAR=1 myprogram.exe

...しかし、機能しません-ある意味でmyprogram.exeはまったく実行されず、おそらくSETコマンドのコマンドラインの一部として解釈されます。

この種のことは、Windowsコマンドプロンプトで実行できますか?必要に応じて、Windows 10を使用します。


編集:これらが見つかりました:

Windows CLIのコマンド置換のようなものはありますか?

Windowsでは、「()」演算子はBashコマンドの置換と同様の動作をします。

https://stackoverflow.com/questions/8055371/how-do-i-run-two-commands-in-one-line-in-windows-cmd

2000年以降のすべてのMicrosoft OSでこのようになり、今日でも良好です。
dir & echo foo

だから、私は試しました:

> (SET MYVAR=1 && myprogram.exe)

...そしてこれは実際に機能します-ただし、Windowsの括弧は「サブシェル」(または「サブプロセス」)ではないようです。したがって、現在のシェルに値「リーク」を設定しますつまり、myprogram.exe上記のコマンドの後でも、引き続きMYVAR=1、Linuxの場合、MYVARは未設定のままになります)。

それで、これを単一のコマンドライン-で一時的に行う方法はありますか?

3
sdbbs

setlocalを使用してバッチファイルを実行できます

またはcmd行で、現在の環境を継承する別のcmd.exeを開始しますが、変更は揮発性です。

cmd /c "SET MYVAR=1&myprogram.exe" 
4
LotPings

このコマンドを試してください:

set Foo=bar & abc.exe & set Foo=

このコマンドは次のことを行います。

  1. Foo変数にbar値を設定します。
  2. abc.execommandを実行します。
  3. 空白値を追加して、Foo変数の設定を解除します。
0
Biswapriyo