我正在处理将由其他脚本调用的VBScript,它复制剪贴板内容并将其用作父脚本的输入。该脚本调用两个批处理文件copyClipboard.bat和copyToScripts.bat。 CopyClipboard.bat将剪贴板复制到名为clip.txt的文本文件中。 CopyToScripts.bat将clip.txt复制到作为参数传入的任何路径。我的逻辑如下。
dim shell
set shell=createobject("wscript.shell")
shell.run "C:\Batch\copyClipboard.bat"
shell.run "C:\Batch\copyToScripts.bat C:\Users\kkulis\Desktop\input.txt"
set shell=nothing
看起来这应该可行,但copyToScripts.bat总是复制clip.txt的内容,然后copyClipboard.bat覆盖它们。因此,即使copyClipboard在copyToScripts之前运行,它就好像copyClipboard从未运行过一样。如果我在命令行中运行copyClipboard.bat然后copyToScripts.bat,它可以正常工作。我认为copyToScripts没有获得clip.txt的更新版本。
我尝试创建两个不同的shell对象,但这并没有解决问题。我错过了什么?
感谢。
答案 0 :(得分:0)
两个批处理文件同时执行,而不是按顺序执行。 object.Run(strCommand,[intWindowStyle],[bWaitOnReturn])。将bWaitOnReturn设置为true。
我们必须看到批处理文件。
以下是如何在VBS中获取剪贴板。
来自Filter.vbs
Set Arg = WScript.Arguments
set WshShell = createObject("Wscript.Shell")
Set Inp = WScript.Stdin
Set Outp = Wscript.Stdout
Sub Clip
Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = 0
'Have to navigate to a local file to put IE into Intranet Zone, else this will generate security dialog asking permission
ie.Navigate2 FilterPath & "Filter.html"
Do
wscript.sleep 100
Loop until ie.document.readystate = "complete"
txt=ie.document.parentwindow.clipboardData.GetData("TEXT")
ie.quit
If IsNull(txt) = true then
outp.writeline "No text on clipboard"
else
outp.writeline txt
End If
End Sub