| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1730 人关注过本帖
标题:Shell DOS Command 的问题
只看楼主 加入收藏
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
结帖率:97.66%
收藏
已结贴  问题点数:20 回复次数:5 
Shell DOS Command 的问题
一般来说下cmd /c 是表示执行完就关闭视窗
所以在VB都写成
程序代码:
    pID = Shell("cmd /c C:\1\1.bat", vbHide)
    Do
        If GetProcessVersion(pID) = 0 Then Exit Do
        MyDoEvents 1000
    Loop


那如果我想要撷取DOS视窗内的资料到剪贴簿上,再存出来那要怎么写?
程序代码:
    pID = Shell("cmd /k C:\1\1.bat", vbHide)'执行结束不关闭视窗
    '--------------------------------------------------------------------------->>
    Do
        If GetProcessVersion(pID) = 0 Then Exit Do'那我怎么知道他什么时候会跑完?
        MyDoEvents 1000
    Loop
    '---------------------------------------------------------------------------<<
    Clipboard.Clear
    AppActivate pID
    SendKeys "%{ }eS%{ }eY"
    Text1.Text = Clipboard.GetText
    
    SendMessage pID, SC_CLOSE, 0, 0


中间那段要怎么写才能去判断?
搜索更多相关主题的帖子: Shell DOS Command pID Do 
2018-11-09 18:05
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
pID = Shell("cmd /C C:\1\1.bat > """ & app.path & "\tmp.tmp""" , vbHide)
把执行结果写入到一个临时文件中,
然后检查这个PID是否存在系统中,直到这个PID消失才知道这个DOS执行完成了。
打开这个文件 文件就是执行结果。



授人于鱼,不如授人于渔
早已停用QQ了
2018-11-10 08:34
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
我希望能将执行和写入分成两个动作,因为实际测试,我Bat内执行数千行指令,完成动作非常耗时,
所以猜测是否实际动动是每执行一行指令,档案就被覆写一次,因为单纯在DOS视窗执行指令时速度不慢,
但是让写入档案一起时,就变得很慢。所以想把两个动作分开做,借此验证是否真的是这个原因。

不知道如何实现,pID是DOS视窗句柄,能否透过API将DOS视窗内容输出到档案内?最后再用API去删除DOS视窗?

不要選我當版主
2018-11-10 14:58
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
我查过">"等于Output,">>"等于Append,假使有一千行指令就变成
For I=0 to 1000
open 1.txt for output as #1 或 open 1.txt for append as #1
......
close #1
next I

我希望能把IO降到一次输出档案

不要選我當版主
2018-11-10 15:11
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:20 
以前看过,可以重定向 dos 输出的重定向。
但忘了它是怎么做的。
搜索一下看看

授人于鱼,不如授人于渔
早已停用QQ了
2018-11-10 15:44
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
以下是引用wube在2018-11-10 15:11:06的发言:

我查过">"等于Output,">>"等于Append,假使有一千行指令就变成
For I=0 to 1000
open 1.txt for output as #1 或 open 1.txt for append as #1
......
close #1
next I

我希望能把IO降到一次输出档案


从别处问到,真的是一千次写档,不过也问到解法,可以变成一次IO处理的方式
超简单,就是外面再包一层BAT就解决了。
内层的BAT只管指令执行,内层Bat执行完毕回到外层Bat再一次输出全部资料。

用Cmd /c Bat Call Bat > 档案的方式,巧妙的避开多次IO存取问题。

不要選我當版主
2018-11-10 19:24
快速回复:Shell DOS Command 的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018366 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved