iT邦幫忙

1

請問大家關於start的用法疑問或是bug???

假設目前有兩個bat檔
B1.bat

Echo test1
Start b2.bat
Pause

B2.bat

Echo test2
Exit

測試結果
1.直接執行b1 可以正常呼叫b2
2.以右鍵選系統管理員身份執行,就會出現警告視窗:「windows找不到’b2.bat’。請確定你輸入正確的名稱,並重試。

所以如果要執行時都要用不同的身份執行;key帳號密碼,即便是登入帳號是管理者帳號。
非常不方便,請問有解法嗎??而且有點好奇為何會這樣,有人知道原理嗎?

試過加雙引號”2.bat” 就可以用系統管理員身份執行找到該檔案,但結果是只開一個新的cmd,什麼都沒執行。

japhenchen iT邦研究生 2 級 ‧ 2020-06-03 07:22:12 檢舉
改成
call b2.bat
start 會啟動另一個 工作環境,使用者也不會是原來執行批次檔那一個
ATF_G iT邦新手 5 級 ‧ 2020-06-08 20:10:49 檢舉
感謝解答
其實之前有改用過call來取代,因為希望流程是start b2時、b1先暫停,b2結束時再跳回b1接著執行,所以才沒用call取代。
---------------------------------------------------
咦!上次的回覆沒出現??

1 個回答

0
浩瀚星空
iT邦超人 1 級 ‧ 2020-06-03 11:35:01
最佳解答
BAT批次指令: START 的功能介紹

START : 開啟另一個視窗來執行指定的程式或命令。

指令詳解:

START ["title"] [/Dpath] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
          [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
          [/WAIT] [/B] [command/program]
          [parameters]

    "title"         顯示在視窗標題列上的文字
    path          起始目錄
    B              啟動應用程式但不建立新視窗。含有 ^C 控制碼的應用程式會被略過,除非應用程式啟用 ^C 程序,否則 ^Break 是唯一可以中斷應用程式的方法
    I               新環境會使用 cmd.exe 的原始環境,而不是目前的環境。
    MIN           視窗最小化
    MAX          視窗最大化
    SEPARATE  用不同的記憶體空間啟動 16 位元視窗程式
    SHARED     用共用的記憶體空間啟動 16 位元視窗程式
    LOW          在 IDLE 主要類別中啟動應用程式
    NORMAL     在 NORMAL 主要類別中啟動應用程式
    HIGH          在 HIGH 主要類別中啟動應用程式
    REALTIME   在 REALTIME 主要類別中啟動應用程式
    ABOVENORMAL 在 ABOVENORMAL 主要類別中啟動應用程式
    BELOWNORMAL 在 BELOWNORMAL 主要類別中啟動應用程式
    WAIT         啟動應用程式並等待其結束
    command/program
                    如果這是內部 cmd 命令或批次檔的話,命令處理器會用 /K 參數執行 cmd.exe。這表示視窗會保持到命令執行完成。
                    如果這不是內部 cmd 命令或批次檔的話,它就是一個程式,它會以視窗程式或主控台 (DOS) 應用程式的執行方式執行。
    parameters 這些是傳給 command/program 的參數。

START的命令會另開一個cmd來運行。加雙引號會被變成是標題而不是程式。
至於你用系統管理身份開啟會出現找不到。
有可能是因為運行的目錄會被切換到系統管理員。
一般大多數建議在你的bat上先做路徑的切換。就可以免掉這些問題

Echo test1

c:
cd /test/bat

Start b2.bat
Pause
ATF_G iT邦新手 5 級 ‧ 2020-06-06 21:43:10 檢舉

感謝指點,原來用系統管理員會主動切換到系統目錄,所以如果這些檔案在隨身碟執行的話,不就要每次都修改目錄位址?有好的方法解決嗎,目前是想到先用set記錄原始執行目錄。

我要發表回答

立即登入回答