sdb*_*bbs 7 windows command-line environment-variables
我见过从命令提示符设置和获取 Windows 环境变量吗?,但我的问题略有不同。
假设我有一个终端程序myprogram.c-> myprogram.exe,它读取环境变量;说:
...
char *valueMYVAR = getenv("MYVAR");
printf("MYVAR is %s\r\n", (valueMYVAR==NULL)?"":valueMYVAR );
...
Run Code Online (Sandbox Code Playgroud)
现在,如果我在 Linux 中bash,我可以临时设置环境变量,只是为了程序的执行,只需在命令行上写出来,如下所示:
$ MYVAR=1 ./myprogram.exe
Run Code Online (Sandbox Code Playgroud)
如果我使用的是 Windows 命令提示符 ( cmd.exe) ,我怎么能做同样的事情?我试过了:
> SET MYVAR=1 myprogram.exe
Run Code Online (Sandbox Code Playgroud)
...但它不起作用 - 从myprogram.exe根本不运行的意义上说,可能被解释为命令的命令行的一部分SET。
这种事情在 Windows 命令提示符中可行吗?如果相关,我使用 Windows 10。
编辑:发现这些:
在 Windows 中,'( )' 运算符的行为与 Bash 命令替换类似。
自 2000 年以来在所有 Microsoft 操作系统上都是这样,今天仍然很好:
dir & echo foo
所以,我试过:
> (SET MYVAR=1 && myprogram.exe)
Run Code Online (Sandbox Code Playgroud)
...这实际上有效 - 除了,似乎 Windows 中的括号不是“子外壳”(或“子进程”),因此将值“泄漏”设置到当前外壳上,这是我不想要的(在换句话说,如果我只是myprogram.exe在上面的命令之后运行,它仍然会选择MYVAR=1,而在 Linux 上,MYVAR在这种情况下将保持未设置)。
那么,有没有办法在单个命令行上执行此操作 -并且是暂时的?
你可以运行一个批处理文件 setlocal
或在 cmd 行启动另一个 cmd.exe,它继承当前环境但更改是不稳定的。
cmd /c "SET MYVAR=1&myprogram.exe"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11457 次 |
| 最近记录: |