在Windows 2012 R2上使用VBS,我试图传递命令行参数isActive="false"
,但我无法在命令行中显示等号。
创建一个类似test.bat的虚拟批处理文件
echo %1
Pause
然后在创建的VBScript中
Set oShell = WScript.CreateObject("WSCript.Shell")
oShell.CurrentDirectory = "C:\test"
'strEqual = Chr(61)
strCommand = "test.bat" & " " & "isActive=" &"""false"""
return = oShell.Run(strCommand, 1, True)
Set oShell = Nothing
我得到 isActive“ false” ,但没有等号。
我试图分离出一个独特的价值
类似于& Chr(61) &
,并尝试在等号前后使用/
和\
以及//
和\\
进行转义。我试图将strEqual = Chr(61)
用作变量。
当传递给命令shell时,如何使=
成为字符串的一部分,我感到茫然。我可以将其写入文本文件,并写入等号,但不能写入外壳。
答案 0 :(得分:1)
您观察到此行为,因为CMD不仅使用空格和制表符,而且还使用逗号,分号和=
字符作为parameter delimiters。意味着isActive="false"
被解析为2个不同的参数:isActive
和"false"
。如果要将其解析为单个参数,则需要将整个键/值对放在引号中:"isActive=false"
。
请注意,必须通过将VBScript字符串文字中的双引号加倍来对其进行转义。如果您需要在参数的值部分加上双引号,只需添加另一组转义的双引号即可。
Set oShell = CreateObject("WScript.Shell")
strCommand = "test.bat ""isActive=""false"""""
return = oShell.Run(strCommand, 1, True)
也不需要连接字符串文字(出于可读性的原因,当您要包装长字符串时除外)。只需将命令定义为单个字符串即可。
答案 1 :(得分:1)
您可以使用过程环境变量将值从VBS传递到BAT / CMD。
将以下代码另存为test.vbs:
strCurDir = CreateObject("Scripting.FileSystemObject").GetParentFolderName(WScript.ScriptFullName) & "\"
CreateObject("WScript.Shell").Environment("process").Item("myvar") = "isActive=""false"""
CreateObject("WSCript.Shell").Run strCurDir & "test.bat"
并且此代码另存为test.bat在同一文件夹中:
echo %myvar%
pause
运行test.vbs,控制台输出将
C:\ Windows \ system32> echo isActive =“ false”
isActive =“ false”