中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 如何这样执行批处理代码?从txt和从粘贴板
« [1] [2] [3] »
作者:
标题: 如何这样执行批处理代码?从txt和从粘贴板 上一主题 | 下一主题
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
状态 离线
『第 35 楼』:  

感谢楼上一直在帮我学习……

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
查看资料  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] [3] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: