|
slore
铂金会员
积分 5212
发帖 2478
注册 2007-2-8
状态 离线
|
『第
31 楼』:
Option Explicit
Dim strClipb
Dim objIE
Dim WshShell,oExec
Dim TempBat
Set objIE = CreateObject("HtmlFile")
strClipb = objIE.parentWindow.clipboardData.getData("text")
'WScript.Echo strClipb 这个可能测试时候写的,就是你说的弹窗,注释掉就完了。
If strClipb = "" Then
Set objIE = Nothing
WScript.Quit
End If '剪贴板如果为空,不执行命令
Set WshShell = CreateObject("WScript.Shell")
CreateBat strClipb '创建临时文件
WshShell.Run "%comspec% /c """ & TempBat & """",1,True '等待脚本执行完毕
Dim objFSO
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.DeleteFile TempBat,True '删除临时脚本
Set objFSO = Nothing
Set objIE = Nothing
Set WshShell = Nothing
Sub CreateBat(strCopy) '创建BAT文件
Dim objFSO, MyFile
Set objFSO = CreateObject("Scripting.FileSystemObject")
TempBat = objFSO.GetTempName & ".bat"
Set MyFile = objFSO.CreateTextFile(TempBat , True)
MyFile.Write strCopy '将剪贴板内容写入临时文件
MyFile.Close
Set objFSO = Nothing
Set MyFile = Nothing
End Sub
删除文件在执行之后做。而不是写到BAT里面执行。。。因为。。。如果在代码最下面写个
:XXX
XXX
XXX
上面调用这个XXX本不应该执行删除的,如果在最后追加del %0遇到带call 标签的bat就不通用了。
|
S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore |
|
2009-9-12 15:33 |
|
|
loquat
初级用户
积分 81
发帖 80
注册 2009-8-30
状态 离线
|
『第
32 楼』:
Quote: | Originally posted by slore at 2009-9-12 15:33:
删除文件在执行之后做。而不是写到BAT里面执行。。。因为。。。如果在代码最下面写个
:XXX
XXX
XXX
上面调用这个XXX本不应该执行删除的,如果在最后追加del %0遇到带call 标签的bat就不通用了。 |
|
这段没太明白。
反正目前call的代码,这个可以完美执行临时bat文件,执行完后才删除
@echo off
mshta vbscript:createobject("scripting.filesystemobject").opentextfile("text.bat",2,true).writeline(CreateObject("htmlfile").parentwindow.clipboarddata.getdata("text"))(window.close)
call text.bat
pause >nul 2>nul
del text.bat
pause 我的意思是,难道start命令就不能做到执行完后再删除临时文件?
|
|
2009-9-13 02:36 |
|
|
loquat
初级用户
积分 81
发帖 80
注册 2009-8-30
状态 离线
|
『第
33 楼』:
估计start要像call那样删除临时文件又不提示错误是不可能了。
start之后理解删除文件,可以执行成功,但是会提示错误。
但是像这样是没问题的。
1.bat
@echo off
echo cn-dos loquat
echo 将要删除本bat文件本身
pause >nul
del %0 为何,直接del %0就没问题,用echo 写出的bat,再用start调用打开就会有错误提示呢?
|
|
2009-9-13 02:47 |
|
|
loquat
初级用户
积分 81
发帖 80
注册 2009-8-30
状态 离线
|
『第
34 楼』:
Quote: | Option Explicit
Dim strClipb
Dim objIE
Dim WshShell,oExec
Dim TempBat
Set objIE = CreateObject("HtmlFile")
strClipb = objIE.parentWindow.clipboardData.getData("text")
'WScript.Echo strClipb 这个可能测试时候写的,就是你说的弹窗,注释掉就完了。
If strClipb = "" Then
Set objIE = Nothing
WScript.Quit
End If '剪贴板如果为空,不执行命令
Set WshShell = CreateObject("WScript.Shell")
CreateBat strClipb '创建临时文件
WshShell.Run "%comspec% /c """ & TempBat & """",1,True '等待脚本执行完毕
Dim objFSO
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.DeleteFile TempBat,True '删除临时脚本
Set objFSO = Nothing
Set objIE = Nothing
Set WshShell = Nothing
Sub CreateBat(strCopy) '创建BAT文件
Dim objFSO, MyFile
Set objFSO = CreateObject("Scripting.FileSystemObject")
TempBat = objFSO.GetTempName & ".bat"
Set MyFile = objFSO.CreateTextFile(TempBat , True)
MyFile.Write strCopy '将剪贴板内容写入临时文件
MyFile.Close
Set objFSO = Nothing
Set MyFile = Nothing
End Sub |
|
你给的这部分,既然上面蓝色部分已经执行过bat了,下面红色部分的还有必要保存吗?
另外,我还是觉得保留原来的那个pause比较好,因为现在的效果是屏幕一闪就没了。除非剪贴板最后有pause结尾。
还是希望有那种,执行完剪帖板了还能继续在里面手动输入命令的。
|
|
2009-9-13 02:53 |
|
|
loquat
初级用户
积分 81
发帖 80
注册 2009-8-30
状态 离线
|
|
2009-9-13 02:54 |
|
|
slore
铂金会员
积分 5212
发帖 2478
注册 2007-2-8
状态 离线
|
『第
36 楼』:
遇到问题记得echo on……start也不会有错的。
@echo off
call :bugtest 1
call :bugtest 2
echo 你能看到我麽?
echo 我暂停了几次呢?
pause
exit
:bugtest
echo test bug %1
echo del %0 是文件麽?你要del?
rem 多加个pause结果如何呢?
pause
你自己测试最后3行带和不带的效果。。。。call不仅仅是调用bat而已。。。
你要暂停的话,调用就用/k不要用/C就行了。
红色的部分是过程CreateBat
代码中出现CreateBat的地方才执行这里。
蓝色执行完脚本就结束了。
CreateBat是在蓝色的部分之前调用的。
|
S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore |
|
2009-9-13 03:52 |
|