我正在尝试创建一个可以运行批处理代码的vbscript文件(注意:不是批处理文件,而是批处理代码)
代码,在批处理文件中运行:
IF EXIST "%appdata%\Microsoft\Windows\Start Menu\Programs\MyManufacturer\MyClickOnceApp.appref-ms" (
"%appdata%\Microsoft\Windows\Start Menu\Programs\MyManufacturer\MyClickOnceApp.appref-ms"
) ELSE (start /b "" cmd /c del "%~f0"&exit /b)
我可以使vbscript代码几乎完成我想要的操作:
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run chr(34) & "C:\myscript.bat" & Chr(34), 0
Set WshShell = Nothing
现在我想将这两段代码合并到一个文件中,这样就可以了:
Set WshShell = CreateObject("WScript.Shell" )
WshShell.Exec "IF EXIST ""%appdata%\Microsoft\Windows\Start Menu\Programs\MyManufacturer\MyClickOnceApp.appref-ms"" (""%appdata%\Microsoft\Windows\Start Menu\Programs\MyManufacturer\MyClickOnceApp.appref-ms"") ELSE (start /b """" cmd /c del ""%~f0""&exit /b)"
Set WshShell = Nothing
然而,当我运行此代码时,我得到The system cannot find the file specified
。这是预期的,因为Exec(或Run或Execute)运行批处理文件而不是批处理代码。那么,是否有类似于Exec的命令将运行批处理代码而不是批处理文件?
我不认为解决方案需要一些额外信息(但为了完成而包括在内):
Set WshShell = Nothing
将使命令无形地运行>nul
,因为我读到它会停止输出。这对我不起作用。我对vbscript以外的其他解决方案持开放态度,前提是他们可以检查.appref文件是否存在,如果是,则运行文件,如果文件不存在则自行删除。这在vbscript中可能是微不足道的,但我之前从未使用过vbscript。
编辑: 根据@Jason的评论,我修改了代码如下。现在它运行时没有输出而且没有运行我的应用程序(AKA它不做$#!+)
Set WshShell = CreateObject("WScript.Shell" )
WshShell.Run "cmd.exe /C ""IF EXIST ""%appdata%\Microsoft\Windows\Start Menu\Programs\MyManufacturer\MyClickOnceApp.appref-ms"" (""%appdata%\Microsoft\Windows\Start Menu\Programs\MyManufacturer\MyClickOnceApp.appref-ms"") ELSE (start /b """" cmd /c del ""%~f0""&exit /b)", 0
Set WshShell = Nothing
答案 0 :(得分:0)
问题是路径中的字符串!像这样工作:
Dim objShell
Set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run "cmd /c if exist test1.txt (echo ok & del test1.txt & pause) else (echo ko & pause)"
尝试使用8.3格式。解决组合名称并且不要使用字符串。
但如果您在VBS中进行编程,为什么还要在其中使用批处理代码?
如果要同时使用两个.BAT文件。或者从您的VBS生成并调用它。
答案 1 :(得分:-1)
这是一个例子:
你有一个名为regex.bat的批次:
@echo off &setlocal
for /f "tokens=1* delims=:" %%i in (
'netsh wlan show interfaces ^| findstr /rxc:"[ ]* SSID [ ]*: ..*"'
) do for /f "tokens=*" %%k in ("%%j") do set "SSID=%%k"
echo %SSID% > regex.txt
vbs看起来像这样:
Set WshShell = WScript.CreateObject( "WScript.Shell" )
WshShell.Run "regex.bat",0,True
这对我很有用。没有cmd-Windows出现。希望这有助于你