iT邦幫忙

0

批次檔如何防止中斷?

symis 2010-05-04 14:16:0112632 瀏覽

遠端以VPN連入公司的windows 2003 server,自動執行一個批次檔如下,請問:

  1. 要如何防止user用Ctrl-C或Ctrl-Break去中斷批次檔?
  2. 還有什麼可以改善的地方?
    thanks!

@echo off
cls
echo * * * * * * * * * * * * * * * *
echo * a. A 系 統 *
echo * b. B 系 統 *
echo * q. 離 開 *
echo * * * * * * * * * * * * * * * *
choice /C abq /M "請按鍵(大小寫均可)"
if errorlevel 3 goto option3
if errorlevel 2 goto option2
if errorlevel 1 goto option1
goto End

: option1
a.exe
goto End

: option2
b.exe
goto End

: option3
exit
goto End

: end
c:
cd\temp\test
menu.bat

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
8
tombo
iT邦高手 1 級 ‧ 2010-05-04 14:43:31
最佳解答

以前在 DOS 底下,可以使用 CTTY NUL 將 KEYBOARD 轉向 NULL DEVICE
就可以達到這個目的,不過現在 XP 底下已經沒有這玩意了

以下連結是 dos 內部及外部指令與 xp 版本的差異說明
http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/dos_diffs.mspx?mfr=true

symis iT邦新手 3 級 ‧ 2010-05-10 15:11:30 檢舉
8
lcjan
iT邦研究生 4 級 ‧ 2010-05-04 21:15:03

symis提到:
端以VPN連入公司的windows 2003 server,自動執行一個批次檔如下,請問:

  1. 要如何防止user用Ctrl-C或Ctrl-Break去中斷批次檔?
  2. 還有什麼可以改善的地

提供一個建議方向:
封裝成執行檔。
http://www.f2ko.de/English/b2e/index.php

看更多先前的回應...收起先前的回應...
tom6507 iT邦大師 1 級 ‧ 2010-05-05 08:10:34 檢舉

這個轉換程式不錯,可是只要按一下右上角的關閉鈕一樣可以關掉,或者用Alt+F4也可以強迫關掉。

symis iT邦新手 3 級 ‧ 2010-05-05 17:46:08 檢舉

感謝大大相助,早該想到這招的。
經測試結果,仍然可中斷,不過因為是以VPN連入自動執行,故中斷後,也隨即離開VPN連線

蟹老闆 iT邦大師 1 級 ‧ 2010-05-06 05:11:00 檢舉

lcjan提到:
封裝成執行檔。

這個執行方式好像還是以批次檔的方式在執行,執行時會在暫存資料夾內產生一個轉換前的批次檔。
不過我也沒試過是否可以中斷

symis iT邦新手 3 級 ‧ 2010-05-19 23:02:13 檢舉

lcjan(

我要選的最佳解答是lcjan,按錯了,嗚...

6
tom6507
iT邦大師 1 級 ‧ 2010-05-05 08:14:57

你可以建立一個捷徑,然後在捷徑中設定,執行此程式的時候要全螢幕執行,這樣就不會被強迫關閉了

tombo iT邦高手 1 級 ‧ 2010-05-05 10:34:34 檢舉

開啟全螢幕應該應該也可以用 Ctrl-Break 中斷 Batch File

2
蟹老闆
iT邦大師 1 級 ‧ 2010-05-06 05:02:37

start /b x.bat
/b可停用ctrl+c或Ctrl+Break(這個可中斷)
按Ctrl-Break會詢問是否中斷,按y後會出現x:\>但輸入任何指令皆會回答是否中斷的訊息,無法輸入其他指令,在按一次ctrl+Break則繼續原批次檔。

看更多先前的回應...收起先前的回應...
symis iT邦新手 3 級 ‧ 2010-05-06 10:12:51 檢舉

我只知道可執行檔為 .com, .exe, .bat
但, .vbs怎執行啊?

蟹老闆 iT邦大師 1 級 ‧ 2010-05-06 12:00:39 檢舉

一樣加到群組原則裡的登入/登出就可以執行了
補充說明的.vbs不適用有選項的批次檔,因為會看不到選項也無法選
做法:
建立run.vbs內容為
wshshell.run ("x.bat"),0
將run.vbs加到群組原則登入執行列表中

tombo iT邦高手 1 級 ‧ 2010-05-06 14:43:29 檢舉

dream提到:
start /b x.bat

這個我試過,按 Ctrl-C 確實沒有中斷,但是按Ctrl-Break,還是一樣可以中斷。

蟹老闆 iT邦大師 1 級 ‧ 2010-05-06 20:40:09 檢舉

tombo提到:
但是按Ctrl-Break,還是一樣可以中斷

start /b 的說明確實是可以中斷,不過我使用時會倒是如原先說的那樣,暫停後輸入其他指令都無效。不知你的狀況是不是跟我一樣,
我的批次檔中有 goto 無限迴圈。

2
sula3065408
iT邦研究生 1 級 ‧ 2010-05-06 08:21:32

寫個程式去呼叫Windows API的shellexec()讓他去呼叫你的shell script在背景執行,下SW_HIDE參數,理論上看不到,焦點不會給你shell的視窗的話,鍵盤碼就不會給你的shell,就應該不會被中斷。

參考這一篇(C++)

不要花錢買或盜版compiler,使用OpenSource的DevC++就可以。

請參考這一篇下載、安裝

這一篇有簡單的教學

去找一本Windows API的書,或是去找網頁寫有關shellexec()的教學,我記得include "windows.h"就可以去呼叫shellexec()的函式。

symis iT邦新手 3 級 ‧ 2010-05-06 10:03:55 檢舉

哇,大大你寫得太深了吧!
你學一個月的東東,我可能要學一年 ~"~

我要發表回答

立即登入回答