batch-file - 推送批处理文件意外行为
问题描述
我正在从 2 个批处理文件中安装 3 个 msi 文件。第一个批处理文件找到 msi 位置并将日志写入我想要的位置
pushd %~dp0..\%VERSION%\MSIFOLDER\
msiexec /i "InstallMe.msi" /qn TARGETDIR="%x32%" TARGET64DIR="%x64%" /L*v "%~dp0Scripts\Logs\InstallMe.log"
msiexec /i "InstallMe2.msi" /qn TARGETDIR="%x32%" TARGET64DIR="%x64%" /L*v "%~dp0Scripts\Logs\InstallMe2.log"
popd
第二个批处理文件找到 msi 位置(与 batch1 相同)并将日志写入我想要的位置(与 batch1 相同的位置)
pushd %~dp0..\%VERSION%\MSIFOLDER\
msiexec /i "InstallMe3.msi" /qn TARGETDIR="%Target_PATH%\InstallMe3" /L*v "%~dp0..\..\BatchFileFolder\Scripts\Logs\InstallMe3.log"
popd
但是,请注意批处理 1 和批处理 2 的日志文件的不同路径
似乎在 batch1 中的 pushd 没有将我推入的路径设置为当前工作目录,因为日志%~dp0
仍然指向批处理文件所在的位置
在 batch2 中,它按我的预期工作......我真的很困惑,基本上相同的命令有不同的行为,并且无法找出导致它的原因。
SETLOCAL EnableDelayedExpansion
在我拥有的两个文件之上
SETLOCAL EnableExtensions
另一件值得一提的是,如果从 1 个批次调用 3 个 MSI,则 pushd 的行为正确,即在将日志文件写入/L*v "%~dp0..\..\BatchFileFolder\Scripts\Logs\InstallMe3.log"
路径时作为 batch2。但是当我将那些 3 分 2 的批处理文件分开时......它们的行为会有所不同吗?!
重要提示:我使用 pushd 的原因是,我无法安装msi
具有相对路径的文件。
任何想法和帮助将不胜感激。
|
+ ContainerDir
| +---MSIFilesRootDir [%VERSION%]
| | +---MSIFilesDir [%~dp0..\%VERSION%\MSIFilesDir]
| | InstallMe1.msi
| | InstallMe2.msi
| | InstallMe3.msi
| |
| +---BatchFileFolder [%~dp0]
| | BatchFile.bat
| | \---Scripts [%~dp0Scripts]
| | \---Logs [%~dp0Scripts\Logs]
| | InstallMe1.log
| | InstallMe2.log
| | InstallMe3.log
| |
这是文件夹和文件结构
解决方案
这是否使您能够可视化事物?我在方括号内添加了一些信息以提供帮助。
|
\---SomeDir [%~dp0..\..]
+---ContainerDir [%~dp0..]
| +---MSIFilesRootDir [%~dp0..\%VERSION%]
| | \---MSIFilesDir [%~dp0..\%VERSION%\MSIFilesDir]
| | InstallMe.msi [%~dp0..\%VERSION%\MSIFilesDir\InstallMe.msi]
| | InstallMe2.msi [%~dp0..\%VERSION%\MSIFilesDir\InstallMe2.msi]
| | InstallMe3.msi [%~dp0..\%VERSION%\MSIFilesDir\InstallMe3.msi]
| |
| \---BatchDir [%~dp0]
| | BatchFile.bat [%0]
| |
| \---Scripts [%~dp0Scripts]
| \---Logs [%~dp0Scripts\Logs]
| InstallMe.log [%~dp0Scripts\Logs\InstallMe.log]
| InstallMe2.log [%~dp0Scripts\Logs\InstallMe2.log]
|
\---BatchFileFolder [%~dp0..\..\BatchFileFolder]
\---Scripts [%~dp0..\..\BatchFileFolder\Scripts]
\---Logs [%~dp0..\..\BatchFileFolder\Scripts\Logs]
InstallMe3.log [%~dp0..\..\BatchFileFolder\Scripts\Logs\InstallMe3.log]
您可以使用Tree
选项/A
和/F
,创建类似的内容(Tree /?
在命令提示符处输入使用信息)
推荐阅读
- laravel - laravel-5.8:在 laravel 中显示更改格式的日期
- python - 在 PyQt 应用程序中将 reactor.run() 放在哪里?
- javascript - Heroku Node.js 应用程序拒绝应用样式,因为它的 MIME 类型
- rust - Rust std::net::UdpSocket 没有名为 recv_from 的方法
- python - 在 python 中使用 mplot3d 绘制透明平面
- java - 如何在不删除配置单元表的情况下基于 DataFrame 从 SparkSQL 更改表,例如删除/添加列?
- text - 如何将文本转换为 MOA 实例?
- c# - 如何使用查询过滤SSRS中的数据?
- c# - 将项目添加到工厂 startnew 中的字典时,代码会抛出 NullReferenceException
- ruby - 在迭代每个索引并保持组大小时跳过某些索引