3

我正在尝试编写一个 Windows 批处理文件,为我公司的内部用户启动一个安装程序。我们的 Intranet 上有一个批处理文件的链接。如果您单击该链接(至少在 IE9 上,我必须支持该链接),那么它会询问您是要运行还是保存文件。大多数用户单击运行,批处理文件作为 IE 的子进程执行,继承其环境变量。这就是我的问题出现的地方。

如果浏览器已经打开了一段时间,可能是在浏览器启动用户的 PC 上设置了(用户或系统级别)环境变量,因此批处理文件看不到该变量,我需要它到。

我想找到一种方法来确保批处理文件始终在新环境下运行。

这有效

rem bootstrap batch file
explorer the_real_batch_file.bat

因为Explorer.exe对用户和系统环境变量的变化保持警惕,但这并不

rem bootstrap batch file
explorer the_real_batch_file.bat some_param

some_param混淆 Windows 资源管理器(它只是启动一个新的 Windows 资源管理器窗口)。我需要能够将参数传递给“真正的”批处理文件,所以这是一个显示停止器。

任何人都可以看到解决这个问题的方法吗?

4

2 回答 2

2

对不起,我是新来的,我一生都无法弄清楚对上面的问题添加评论......

无论哪种方式,explorer.exe 都不会处理批处理文件的执行,而 cmd /c 会。

尝试做

cmd /c "batchfile.bat argument"

另一种方法是找出您的软件中正在调用哪些环境变量,并在批处理中调用它们以确保它们是正确的,如果不正确则失败。IE

IF "%ENVIORMENTALVARIABLE%" NEQ "WhatitShouldBe" (goto :fail) else goto continue
:fail
echo this failed <insert exitcode here>
:continue
于 2012-11-09T17:47:06.563 回答
2

我最终稍微简化了我的问题。我现在可以运行start explorer my_batch_file(不带批处理文件的参数),因为我生成了一个定制的中间批处理文件,%TEMP%其中包含我需要的参数。

所以我这样做:

start explorer %TEMP%\temp_batch_file.bat

在里面temp_batch_file.bat我有

call my_original_batch_file.bat some_argument

这似乎工作正常。

于 2012-11-12T10:19:32.840 回答