如何使用 ShellExecute 从 VBScript 将参数传递给批处理文件 [重复]
Posted
技术标签:
【中文标题】如何使用 ShellExecute 从 VBScript 将参数传递给批处理文件 [重复]【英文标题】:How to pass arguments to batch file from VBScript using ShellExecute [duplicate] 【发布时间】:2020-07-09 07:07:50 【问题描述】:我第一次使用 VBScript 来完成我的一项任务。正在尝试构建 Windows 安装程序。
在将所有内容导入应用程序文件夹之前,想在外部尝试一下,但没有成功。我想以提升的权限执行安装。请更正我的脚本。
问题:如果发送到批处理文件的参数包含空格,则 参数被截断。
我的 VBScript 代码:
' Get target folder path from "CustomActionData" property.
dim targetDirectory
targetDirectory = "D:\New folder\batch files\"
' Prepare file path of install batch file.
batchFilePath = targetDirectory & "install-v2.bat"
' Pass targetDirectory as argument to batch file.
' Run the install batch file with elevated permissions as administrator
Set ObjShell = CreateObject("Shell.Application")
ObjShell.ShellExecute batchFilePath, targetDirectory, , "runas", 0
我的批处理文件:
@echo off
set HEADER=[MY-APP-NAME] %DATE% %TIME%
set TARGET_DIRECTORY=%1
set LOG_LOCATION="C:\Users\PureAjax\Downloads\batch-experiments\log.txt"
echo %HEADER% -- Instalation process started -- >> %LOG_LOCATION%
echo %HEADER% Target Directory %TARGET_DIRECTORY% >> %LOG_LOCATION%
rem will be using TARGET_DIRECTORY to achieve my task
echo %HEADER% -- Instalation process finished -- >> %LOG_LOCATION%
@pause
日志文件
[MY-APP-NAME] 28-03-2020 23.07.15.78 -- Instalation process started --
[MY-APP-NAME] 28-03-2020 23.07.15.78 Target Directory D:\Newfolder\batchfiles\
[MY-APP-NAME] 28-03-2020 23.07.15.78 -- Instalation process finished --
[MY-APP-NAME] 28-03-2020 23.09.13.66 -- Instalation process started --
[MY-APP-NAME] 28-03-2020 23.09.13.66 Target Directory D:\New
[MY-APP-NAME] 28-03-2020 23.09.13.66 -- Instalation process finished --
我可以在日志文件中看到,如果路径不包含空格,那么批处理文件会收到完整路径,否则会被截断。 或者,有没有办法在构建 MSI 安装程序时直接将参数传递给批处理文件?
尝试了以下解决方案,但没有奏效
arguments = Chr(34) & targetDirectory & Chr(34)
和传递参数到批处理文件
ObjShell.ShellExecute "cmd", batchFilePath, arguments, "runas", 0
【问题讨论】:
在 *** 中发现了几个类似的问题,但我遗漏了一些东西。 也试过这个 ObjShell.ShellExecute "cscript", batchFilePath, arguments, "runas", 0 【参考方案1】:似乎有一个错误会阻止在参数中使用双引号。 你可以试试
ObjShell.ShellExecute "cmd",_
"/c """"" & batchFilePath & """ """ & targetDirectory & """""",,_
"runas", 0
其中%1
将用双引号作为"D:\New folder\batch files\"
接收。
或者,您可以发送带有替换空格的参数
p = Replace(targetDirectory, " ", "_")
ObjShell.ShellExecute batchFilePath, p , , "runas", 0
然后在批处理文件中替换它
set TARGET_DIRECTORY=%1
set TARGET_DIRECTORY=%TARGET_DIRECTORY:_= %
【讨论】:
如果目录包含_(下划线),那么它们将被替换为“”(空格)对吗?这是不受欢迎的行为。 这只是一种替代方式,您可以使用任何字符或字符串,而不仅仅是_
好的。检查了您的解决方案的前半部分对我有用。于是接受了。感谢您的宝贵时间。以上是关于如何使用 ShellExecute 从 VBScript 将参数传递给批处理文件 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何查找是不是可以通过 ShellExecute 打开文档?