将参数\变量从.vbs传递给.bat

时间:2014-06-25 16:35:38

标签: variables batch-file vbscript parameters

我正在尝试将变量从VBS传递到BAT,但我得到“系统无法找到指定的文件”

这是我的vbs:

 Option Explicit

Dim strFile

strFile = SelectFile( )

If strFile = "" Then 
    WScript.Echo "No file selected."
Else
    WScript.Echo """" & strFile & """"
End If


Function SelectFile( )

    Dim objExec, strMSHTA, wshShell

    SelectFile = ""


    strMSHTA = "mshta.exe ""about:" & "<" & "input type=file id=FILE>" _
             & "<" & "script>FILE.click();new ActiveXObject('Scripting.FileSystemObject')" _
             & ".GetStandardStream(1).WriteLine(FILE.value);close();resizeTo(0,0);" & "<" & "/script>"""

    Set wshShell = CreateObject( "WScript.Shell" )
    Set objExec = wshShell.Exec( strMSHTA )

    SelectFile = objExec.StdOut.ReadLine( )


Dim wshShelll
Set WshShelll = Wscript.CreateObject("WScript.Shell")
WshShelll.Run "C:\Users\nbendjelida\Desktop\email.bat" & SelectFile


    Set objExec = Nothing
    Set wshShell = Nothing
    Set wshShelll = Nothing
End Function

这是我的蝙蝠:

 "C:\Program Files\Microsoft Office\Office12\Outlook.exe" /eml %1
你知道吗?

1 个答案:

答案 0 :(得分:0)

我重复sachadee的正确答案,并提供更多详细信息,以便从未回答的问题列表中删除此问题。

必须使用第一个参数调用

Run Method,该命令是使用与在命令行窗口中输入命令时完全相同的参数执行的命令。引用的Microsoft帮助页面上的示例在命令Notepad之后还有一个空格字符。

使用文件名作为第一个参数调用批处理文件所需的命令行是:

C:\Users\nbendjelida\Desktop\email.bat name_of_selected_file

但Windows脚本主机代码行

WshShelll.Run "C:\Users\nbendjelida\Desktop\email.bat" & SelectFile

为命令构建字符串以

运行
C:\Users\nbendjelida\Desktop\email.bat name_of_selected_file

因为缺少空格字符。

使用正确的Windows脚本主机代码行解决问题

WshShelll.Run "C:\Users\nbendjelida\Desktop\email.bat " & SelectFile

因为批处理文件的名称和所选文件的名称之间的空格特征。


如果所选文件的名称包含1个或多个空格,则变量SelectFile必须在开头和结尾包含双引号,或者在连接命令字符串时添加必要的双引号。< / p>

整个批处理文件名也包含空格字符的示例:

Dim FileName
FileName = "%TEMP%\Any File.txt"
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run """%USERPROFILE%\Desktop\My Batch File.bat"" """ & FileName & """"

包含

的当前用户桌面上的批处理文件My Batch File.bat
@echo %0 %*
@pause

输出,例如Windows 7

"C:\Users\username\Desktop\My Batch File.bat" "C:\User\username\AppData\Local\Temp\Any File.txt"

或英文版Windows XP

"C:\Documents and Settings\user name\Desktop\My Batch File.bat" "C:\Documents and Settings\user name\Local Settings\Temp\Any File.txt"

这是命令字符串的预期结果。

(是的,用户名可以包含空格字符,但Microsoft建议不要在用户名中使用空格字符,请参阅Microsoft页面Creating User and Group Accounts。)