微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

批处理脚本-使用管道时未设置环境变量

如何解决批处理脚本-使用管道时未设置环境变量

我有2个脚本:

  1. set_env_var.bat-如果按下“ y”,则设置环境变量。
  2. 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


尽管在这种特殊情况下不是绝对必要的(因为所有命令都在同一行中),但是您仍然应该遵循Moficomment并使用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 举报,一经查实,本站将立刻删除。