如何解决批处理脚本-使用管道时未设置环境变量
我有2个脚本:
- set_env_var.bat-如果按下“ y”,则设置环境变量。
- install.bat-安装我的项目-取决于set_env_var.bat环境变量。
我正在尝试在单个cmd指令中运行这些脚本:
echo y| set_env_var.bat && install.bat
以这种方式运行即时消息时,我找不到set_env_var.bat设置的任何环境变量,而不是cmd或install.bat。
我猜set_env_var.bat以这种方式运行时是在新CMD上启动的...
知道如何解决吗?
解决方法
是的,管道|
为任一侧启动了两个新的cmd
实例,所有环境更改最终都丢失了。
您可以创建一个“是”文件(一个仅包含y
的文本文件),然后使用输入重定向:
< "yes.txt" "set_env_var.bat" && "install.bat"
您甚至可以包括其创建和删除:
(echo y) > "yes.txt" && < "yes.txt" "set_env_var.bat" && "install.bat" & del "yes.txt"
echo y
周围的括号可防止意外返回 SPACE 。
尽管在这种特殊情况下不是绝对必要的(因为所有命令都在同一行中),但是您仍然应该遵循Mofi的comment并使用call
,请从另一个调用一个批处理文件以确保执行返回到主脚本,特别是由于条件执行的正确处理(使用运算符&&
和||
)
(echo y) > "yes.txt" && (< "yes.txt" call "set_env_var.bat" && call "install.bat" & del "yes.txt")
故意使用括号以及命令连接运算符(&
,&&
):
- 第一对括号仍然避免将尾随的 SPACE 写入
yes.txt
; - 第二对与
&&
和&
一起控制执行流程:- 尝试创建
yes.txt
;仅在成功后,才执行以下命令,即带括号的其余部分;- 致电
set_env_var.bat
; - 仅在
set_env_var.bat
成功后才致电install.bat
; - 独立于前面的命令是否成功,请尝试删除
yes.txt
;
- 致电
- 尝试创建
在这种情况下,成功表示退出代码为零,而失败表示退出代码为非零。
请注意,如果不对批处理文件使用call
,则运算符&&
和||
可能会导致意外结果。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。