batch-file - 将带有引号的字符串从批处理文件传递到VBScript?
问题描述
我正在尝试将批处理文件中的字符串参数传递给包含字符串的 vbs 脚本,但遇到了一些问题。我已经尝试了一些变体,但无法做到正确。
_execute.vbs
:
Set fso = CreateObject ("Scripting.FileSystemObject")
Set stdout = fso.GetStandardStream(1)
Set stderr = fso.GetStandardStream(2)
stdout.Write WScript.Arguments.Item(0) & "... "
Dim objShell, oExec
Set objShell = WScript.CreateObject ("WScript.Shell")
intReturn = objShell.Run(WScript.Arguments.Item(1), 0, True)
if intReturn = 0 Then
stdout.WriteLine "Done"
Else
stderr.WriteLine "Error (Return Code: " & intReturn & ") trying to execute [" & WScript.Arguments.Item(1) & "]"
End If
第一次尝试:
install.bat
:@echo off cscript /nologo _execute.vbs "Installing IIS" "C:\Windows\SysWOW64\inetsrv\appcmd set site ""Default Web Site"" -name:Stream"
输出:
安装 IIS...错误(返回码:87)试图执行 [C:\Windows\SysWOW64\inetsrv\appcmd set site Default Web Site -name:Stream]
第二次尝试:
install.bat
:@echo off cscript /nologo _execute.vbs 'Installing IIS' 'C:\Windows\SysWOW64\inetsrv\appcmd set site "Default Web Site" -name:Stream'
输出:
'正在安装... C:\DEV_execute.vbs(8, 1) (null): 系统找不到指定的文件。
第三次尝试:
install.bat
:@echo off cscript /nologo _execute.vbs "Installing IIS" "C:\Windows\SysWOW64\inetsrv\appcmd set site ^"Default Web Site^" -name:Stream"
输出:
安装 IIS...错误(返回码:1168)试图执行 [C:\Windows\SysWOW64\inetsrv\appcmd set site ^Default]
如何传递两个可能包含引号的字符串参数?
解决方案
我最终只在批处理文件中使用了单引号
cscript /nologo _execute.vbs "Installing IIS" "C:\Windows\SysWOW64\inetsrv\appcmd set site 'Default Web Site' -name:Stream"
并用 VBS 文件中的双引号替换它们。
Replace(WScript.Arguments.Item(1),"'",chr(34))
这并不理想,但它适用于我的用途。
推荐阅读
- flutter - 颤振推特登录身份验证
- r - 如何修复“参数不是数字或逻辑:返回 NA”
- python-2.7 - 虽然函数使用尝试不返回我认为应该的值
- mysql - 选择用户的非朋友的 MySQL 查询
- c# - 无法修复“无法创建 SSL/TLS 安全通道”发出 webrequest
- regex - 如果下一个字符是字母而不是数字,则将“-”替换为空格,并在开头时删除
- mysql - 有子句中的未知列
- reactjs - 表格 - 如何从特定列展开
- bootstrap-vue - 是否可以通过一条垂直线将 bootstrap-vue 表的列分为两组?
- c++ - Base Class中虚析构函数的实用性