[技巧分享]多條Shell語(yǔ)句執(zhí)行導(dǎo)致判斷出錯(cuò)的解決辦法
時(shí)間:2013-07-04 23:21 來(lái)源:Office中國(guó) 作者:Access中國(guó)tmtony 閱讀:次
問(wèn)題:
_________________________________________________________________
我在一個(gè)模塊中的一個(gè)過(guò)程中寫(xiě)了以下幾句代碼:
Shell "net use z: \\qmxmaster\D$ "
Shell "xcopy w:\bakData z:\pxsystem\bakData\ /e /c /y", 0
Shell "net use z: /del"
w:是局域網(wǎng)中A計(jì)算機(jī)本來(lái)就設(shè)置的一個(gè)網(wǎng)絡(luò)驅(qū)動(dòng)器,映射B計(jì)算機(jī)的一個(gè)
共享文件夾。z:是通過(guò)代碼臨時(shí)在A機(jī)器建立的另一個(gè)網(wǎng)絡(luò)驅(qū)動(dòng)器,指向B
計(jì)算機(jī)的d盤。
在A計(jì)算機(jī)運(yùn)行這個(gè)過(guò)程,把w:\bakData文件夾中全部文件拷貝到B計(jì)算機(jī)
(機(jī)器名pxmaster) 的D盤 bakData文件夾中。
現(xiàn)在前兩步都做到了,可以建立文件夾并拷貝,但是第3句卻不起作用,驅(qū)動(dòng)
器z總是不能消失,可是 我把第3句放到命令行是能夠正常執(zhí)行的。何故?
是不是考貝時(shí)間過(guò)長(zhǎng)(5-6秒),代碼不執(zhí)行?是否可以讓代碼執(zhí)行有一個(gè)等待
過(guò)程?
解決(tmtony Office中國(guó)/Access中國(guó)):
_____________________________________________________________
應(yīng)該是等待時(shí)間過(guò)長(zhǎng). 兩種方法
1.Shell("命令", vbHide, True) 最后參數(shù)為true 這個(gè)可選參數(shù)設(shè)為True就可以讓Shell執(zhí)行完才接著Shell下邊的代碼
2.使用API來(lái)判斷 建立以下的代碼
Option Explicit
'等待shell執(zhí)行完成后才執(zhí)行下一條代碼
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Const PROCESS_QUERY_INFORMATION = &H400
Private Const STATUS_PENDING = &H103
Private Const SYNCHRONIZE = &H100000
Private Const INFINITE = &HFFFFFFFF
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
'執(zhí)行Shell命令并等待程序執(zhí)行完畢 再返回控制權(quán)才繼續(xù)執(zhí)行下一句代碼
Private Sub Command1_Click()
Dim pId As Long, pHnd As Long ' 分別聲明 Process Id 及 Process Handle 變數(shù)
pId = Shell("http://www.mzhfr.cn") ' Shell 傳回 Process Id
pHnd = OpenProcess(SYNCHRONIZE, 0, pId) ' 取得 Process Handle
DoEvents ' doevents
If pHnd <> 0 Then
Call WaitForSingleObject(pHnd, INFINITE) ' 無(wú)限等待,直到程序結(jié)束
Call CloseHandle(pHnd)
End If
MsgBox "執(zhí)行完畢 "
End Sub
_________________________________________________________________
我在一個(gè)模塊中的一個(gè)過(guò)程中寫(xiě)了以下幾句代碼:
Shell "net use z: \\qmxmaster\D$ "
Shell "xcopy w:\bakData z:\pxsystem\bakData\ /e /c /y", 0
Shell "net use z: /del"
w:是局域網(wǎng)中A計(jì)算機(jī)本來(lái)就設(shè)置的一個(gè)網(wǎng)絡(luò)驅(qū)動(dòng)器,映射B計(jì)算機(jī)的一個(gè)
共享文件夾。z:是通過(guò)代碼臨時(shí)在A機(jī)器建立的另一個(gè)網(wǎng)絡(luò)驅(qū)動(dòng)器,指向B
計(jì)算機(jī)的d盤。
在A計(jì)算機(jī)運(yùn)行這個(gè)過(guò)程,把w:\bakData文件夾中全部文件拷貝到B計(jì)算機(jī)
(機(jī)器名pxmaster) 的D盤 bakData文件夾中。
現(xiàn)在前兩步都做到了,可以建立文件夾并拷貝,但是第3句卻不起作用,驅(qū)動(dòng)
器z總是不能消失,可是 我把第3句放到命令行是能夠正常執(zhí)行的。何故?
是不是考貝時(shí)間過(guò)長(zhǎng)(5-6秒),代碼不執(zhí)行?是否可以讓代碼執(zhí)行有一個(gè)等待
過(guò)程?
解決(tmtony Office中國(guó)/Access中國(guó)):
_____________________________________________________________
應(yīng)該是等待時(shí)間過(guò)長(zhǎng). 兩種方法
1.Shell("命令", vbHide, True) 最后參數(shù)為true 這個(gè)可選參數(shù)設(shè)為True就可以讓Shell執(zhí)行完才接著Shell下邊的代碼
2.使用API來(lái)判斷 建立以下的代碼
Option Explicit
'等待shell執(zhí)行完成后才執(zhí)行下一條代碼
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Const PROCESS_QUERY_INFORMATION = &H400
Private Const STATUS_PENDING = &H103
Private Const SYNCHRONIZE = &H100000
Private Const INFINITE = &HFFFFFFFF
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
'執(zhí)行Shell命令并等待程序執(zhí)行完畢 再返回控制權(quán)才繼續(xù)執(zhí)行下一句代碼
Private Sub Command1_Click()
Dim pId As Long, pHnd As Long ' 分別聲明 Process Id 及 Process Handle 變數(shù)
pId = Shell("http://www.mzhfr.cn") ' Shell 傳回 Process Id
pHnd = OpenProcess(SYNCHRONIZE, 0, pId) ' 取得 Process Handle
DoEvents ' doevents
If pHnd <> 0 Then
Call WaitForSingleObject(pHnd, INFINITE) ' 無(wú)限等待,直到程序結(jié)束
Call CloseHandle(pHnd)
End If
MsgBox "執(zhí)行完畢 "
End Sub
(責(zé)任編輯:admin)
頂一下
(3)
100%
踩一下
(0)
0%
相關(guān)內(nèi)容
- ·API函數(shù)詳細(xì)解釋
- ·Access從剪切版里復(fù)制和粘貼數(shù)據(jù)
- ·Access利用api實(shí)現(xiàn)打開(kāi)/關(guān)閉光驅(qū)
- ·應(yīng)用程序開(kāi)機(jī)自動(dòng)啟動(dòng)(注冊(cè)表操作技巧
- ·Access VBA 判斷網(wǎng)絡(luò)是否連通的多種辦
- ·什么是ADP,了解ADP的優(yōu)缺點(diǎn)
- ·優(yōu)秀產(chǎn)品大全--通用票據(jù)打印軟件(新)
- ·[技巧分享]多條Shell語(yǔ)句執(zhí)行導(dǎo)致判斷
- ·在access中可以調(diào)用API函數(shù)GetFileInfo
- ·Access API集中營(yíng)--增加臨時(shí)使用的字體
- ·API ShellExecute 功能說(shuō)明及應(yīng)用示例
- ·在VB中使用API函數(shù)(什么是API? )
- ·API實(shí)現(xiàn)完美的圖片出現(xiàn)效果(轉(zhuǎn))
- ·API 設(shè)置調(diào)整系統(tǒng)當(dāng)前時(shí)間
- ·如何檢測(cè)以及設(shè)置鍵盤狀態(tài)
- ·不關(guān)閉當(dāng)前數(shù)據(jù)庫(kù)COPY當(dāng)前數(shù)據(jù)庫(kù)
最新內(nèi)容
- ·API函數(shù)詳細(xì)解釋
- ·Access從剪切版里復(fù)制和粘貼數(shù)據(jù)
- ·Access利用api實(shí)現(xiàn)打開(kāi)/關(guān)閉光驅(qū)
- ·應(yīng)用程序開(kāi)機(jī)自動(dòng)啟動(dòng)(注冊(cè)表操作技巧)
- ·Access VBA 判斷網(wǎng)絡(luò)是否連通的多種辦法(函
- ·什么是ADP,了解ADP的優(yōu)缺點(diǎn)
- ·優(yōu)秀產(chǎn)品大全--通用票據(jù)打印軟件(新)
- ·[技巧分享]多條Shell語(yǔ)句執(zhí)行導(dǎo)致判斷出錯(cuò)
- ·在access中可以調(diào)用API函數(shù)GetFileInformat
- ·Access API集中營(yíng)--增加臨時(shí)使用的字體
推薦內(nèi)容