我正在编写一个创建vbs文件的vb.net应用程序.我已经创建了该文件并测试了发送一行文本,没有任何问题.但是,第二行有问题.
File.WriteLine("set WshShell = CreateObject("WScript.Shell")")
Run Code Online (Sandbox Code Playgroud)
在第二个引号后,它停止以字符串或文本形式读取它.我错过了什么?
在Python中,您没有义务使用文件,您可以-c "..."通过命令行上的字符串指定并向Python解释器提供Python命令.
我可以用vbscript获得相同的结果吗?我见过需要你使用批处理脚本的解决方案,但是如果我在一个零写权限的系统上怎么办?
根据@Syberdoor的回答,我可以运行:
mshta vbscript:Execute("dim result:result=InputBox(""message"",""title"",""input"")(window.close):echo result")
Run Code Online (Sandbox Code Playgroud)
但它仍然不会在控制台中打印结果.
我正在使用Installshield 2014和2011。正在使用主要升级和自动构建脚本来处理构建。InstallShield是独立的构建版本。对彼此而言。
现在,Windows 2003服务器上的Installshield 2011一切正常。我可以使用自动化界面打开一个项目,更改产品代码(用于主要升级),然后在构建安装程序之前将其保存。
这样的代码在vbs文件中如下所示:
Dim oISM, oGUID
Set oGUID = CreateObject("InstallShield.GUID")
Set oISM = CreateObject("IswiAuto17.ISWiProject")
oISM.OpenProject strInstallShieldProjectFile
oISM.ProductCode = "{" & oGUID.CreateGUID( ) & "}"
oISM.SaveProject : oISM.CloseProject : set oISM = Nothing
Run Code Online (Sandbox Code Playgroud)
现在,我们已经升级到Windows 2012服务器和InstallShield2014。我已经仔细检查过,根据InstallShield,唯一需要的更改是版本号(从17更改为21)。
但是现在没有任何效果。如果我取出代码并将其放入自己的vbs文件中进行测试并运行,我将得到以下信息:
ActiveX组件无法创建对象:“ InstallShield.GUID”
在谷歌上看,我看到这是在64位模式下运行的。。。。我在32位模式下运行cmd提示符。 http://helpnet.flexerasoftware.com/installshield18helplib/AutomationInterface64Bit.htm
我尝试使用以下脚本调用脚本:%WINDIR%\ SYSWOW64 \ cmd.exe / c cscript
如此处建议的那样: 如何在64位计算机上以32位模式运行VBScript?
和其他地方。这没有用,因为我遇到了同样的错误。
我尝试删除该行,因为我确定可以用另一种方式创建Guid,然后重新运行它。
然后在尝试创建项目时得到了此消息:未知的运行时错误:'CreateObject'
谷歌再次出现,我检查了:https : //community.flexerasoftware.com/showthread.php?189788-Automation-error
和其他人。我尝试确保使用regsvr32注册了dll,并说它成功。但是在重新运行后,它给出了相同的错误。
我尝试直接处理InstallShield文档中的命令,以确保没有拼写错误,但又出现了相同的错误。
我什至尝试按此处所述切换“ sw”的大小写: 运行vbscript时Installshield Automation失败,错误是无法创建对象
同样,同样的错误。
我还尝试了切换到Powershell,因为Powershell更容易调试和阅读。
powershell代码很简单,如下所示:
$oIsm = new-object -comobject IswiAuto21.ISWiProject
$oISM.OpenProject("$file")
$oISM.ProductCode = "{" + [guid]::NewGuid() + "}" …Run Code Online (Sandbox Code Playgroud) 是否可以循环函数直到item = TRUE?
我试图ping服务器...一旦建立连接,或Ping = TRUE,程序将执行.如果未建立连接,则ping将重复,直到它为TRUE.
到目前为止,我的代码如下.如果为TRUE,MyProgram将打开.如果为False,则再次调用该函数.但这不会发生......实际上没有任何事情发生,它只是退出.
任何帮助都很高兴.如果有人知道更有效的方法来完成这项任务,请告诉我.谢谢!
Function Ping
Dim oPing, oRetStatus, bReturn
Set oPing = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery("select * from Win32_PingStatus where address='" & "strHost" & "'")
For Each oRetStatus In oPing
If IsNull(oRetStatus.StatusCode) Or oRetStatus.StatusCode <> 0 Then
bReturn = False
Else
bReturn = True
End If
Set oRetStatus = Nothing
Next
Set oPing = Nothing
Ping = bReturn
End Function
If Ping Then
Call MyProgram
Else
Call PingSub
End If
Sub MyProgram
Dim objShell
Set objShell = WScript.CreateObject( …Run Code Online (Sandbox Code Playgroud) 代码就像
'first for loop
for I = 1 to 5
do sth
'second for loop
for j = 2 to 7
do sth
'third for loop
for m = 2 to 43
if [condition] then
exit 2nd and 3rd loop and continue on next I ?????
end if
next
next
next
Run Code Online (Sandbox Code Playgroud)
我写了两个"退出",但它没有帮助.它只退出第3个循环并继续下一个j.
我正在使用.hta,其中包含文本文件中的单词列表,当此文件具有0kb时出现问题...如果文件的大小为0kb而不是错误并加载空白文件,我将如何操作?
我的代码:
<script type="text/vbscript">
Option Explicit
Window.resizeTo 373,610
Const csFSpec = "MyList.TxT"
Dim goFS : Set goFS = CreateObject("Scripting.FileSystemObject")
Sub Window_OnLoad()
If goFS.FileExists(csFSpec) Then
document.all.DataArea.value = goFS.OpenTextFile(csFSpec).ReadAll()
Else
self.close
End If
If document.all.DataArea.value =vbcrlf Then
document.all.DataArea.value =""
Else
End If
End Sub
Sub SaveFile()
If document.all.DataArea.value = "" Then
document.all.DataArea.value =vbcrlf
goFS.CreateTextFile(csFSpec).Write document.all.DataArea.value
self.close
Else
document.all.DataArea.value = Replace(document.all.DataArea.value, "\", "_")
document.all.DataArea.value = Replace(document.all.DataArea.value, "/", "_")
document.all.DataArea.value = Replace(document.all.DataArea.value, ":", "_")
document.all.DataArea.value = Replace(document.all.DataArea.value, "*", "_")
document.all.DataArea.value = Replace(document.all.DataArea.value, "?", "_") …Run Code Online (Sandbox Code Playgroud) 我在VBScript中有两个相等的dim数组,我想检查它们是否包含确切的值.如果它们只有一个值不同,则它们不相等.
我不关心价值观本身.我需要在没有循环的情况下完成它.我的意思是类似的东西if arrx() = arry() then.
两个月前,微软发布了更新(另一个问题的一部分),这导致我的软件出现问题.我找到了解决方法如何卸载它,但卸载后,Windows再次安装它.
我知道在未经用户许可的情况下不得隐藏更新 - 这不是我的问题的一部分.
我正在寻找一种如何隐藏此更新的方法.我接受任何解决方案,但我更喜欢Batch或VB-script.
我需要创建一个批处理脚本,持续监视特定文件的更改,在本例中为LogTest.txt.
文件更新后,它将触发一个VBScript消息框,显示LogTest.txt中的最后一行.这个想法是,在消息框被清除后,这将继续监控.
我尝试过使用该forfiles选项,但这只能让我处理日期而不是时间.我知道PowerShell和其他选项都可用,但由于原因太长而无法解释,我只能使用批处理和VBScript.
批处理文件:
@echo off
:RENEW
forfiles /m LogTest.txt /d 0
if %errorlevel% == 0 (
echo The file was modified today
forfiles /M LogTest.txt /C "cmd /c echo @file @fdate @ftime"
cscript MessageBox.vbs "Error found."
REM do whatever else you need to do
) else (
echo The file has not been modified today
dir /T:W LogTest.txt
REM do whatever else you need to do
)
goto :RENEW
Run Code Online (Sandbox Code Playgroud)
MessageBox.vbs:
Set objArgs = WScript.Arguments
messageText = …Run Code Online (Sandbox Code Playgroud) 我正在使用以下脚本创建快捷方式:
Set oShellLink = objShell.CreateShortcut("shortcut.lnk")
oShellLink.TargetPath = "C:\Windows\System32\mshta.exe D:\path\to\file.hta"
oShellLink.WindowStyle = 1
oShellLink.IconLocation = "logo.ico"
oShellLink.Description = "app"
oShellLink.WorkingDirectory = desktop
oShellLink.Save
Run Code Online (Sandbox Code Playgroud)
在oShellLink.TargetPath = "C:\Windows\System32\mshta.exe D:\path\to\file.hta"它卡住,因为在目标路径的空间.怎么做到这一点?我也试过像这样操纵字符串.
"C:\Windows\System32\mshta.exe" & " " & """" & "D:\PLR\software\plrplus.dll" & """"
Run Code Online (Sandbox Code Playgroud)