batch-file - 为什么 PATH 的值没有保留在 if 块中
问题描述
我看到 Windows 批处理脚本的一些奇怪行为。当在块PATH
外设置时if
,其值被保留,但在if
块内设置时不保留该值。
这是一个显示问题的最小 .bat 文件。
@echo off
echo %*
set PATH=c:\Windows;
set "PATH=c:\Program Files\Siemens\NX 9.0\UGII;%PATH%"
PATH
set "PATH=c:\Program Files\Siemens\NX 9.0\UGII\managed;%PATH%"
PATH
set PATH=c:\Windows;
set arg=%1
if "%arg%" == "a" (
echo "------------------------------------------"
set "PATH=c:\Program Files\Siemens\NX 9.0\UGII;%PATH%"
PATH
set "PATH=c:\Program Files\Siemens\NX 9.0\UGII\managed;%PATH%"
PATH
)
a
使用一个作为唯一参数调用脚本时的输出。
a
PATH=c:\Program Files\Siemens\NX 9.0\UGII;c:\Windows;
PATH=c:\Program Files\Siemens\NX 9.0\UGII\managed;c:\Program Files\Siemens\NX 9.0\UGII;c:\Windows;
"------------------------------------------"
PATH=c:\Program Files\Siemens\NX 9.0\UGII;c:\Windows;
PATH=c:\Program Files\Siemens\NX 9.0\UGII\managed;c:\Windows;
如您所见,"c:\Program Files\Siemens\NX 9.0\UGII"
输出的最后一行缺少该目录。
这是预期的吗?
有没有办法让这项工作不需要PATH
在块内只设置一次if
?
解决方案
推荐阅读
- java - 使用“ITestListener”或“IReporter”监听器生成范围报告
- python - 如何修复编程错误:(1064,“您的 SQL 语法有错误)?
- hibernate - 如何使用apache lucene实现对嵌套深层嵌套对象的全文搜索?在 Spring Boot 项目中
- asp.net-core - 如何从控制器传递对象并在 ASP.Net Core 中的视图上使用它
- c - STM32F4 发现的 USART 超时中断
- ubuntu - 由于端口冲突,无法运行 kubectl,但也无法通过在线解决方案修复它们
- sql-server - 在使用 Ola Hallengren 创建备份后删除 Linux SQL Server 2017 的旧数据库备份?
- batch-file - 在 dos4gw 中回显 %errorlevel%
- reactjs - React Apollo Client - 在查询数据进入缓存之前修改它
- google-api - 执行 Batch API 以将多个用户添加到多个组