iT邦幫忙

0

bat檔要驗證語法是否執行成功

  • 分享至 

  • xImage

我的問題如下:
目前是使用bat執行多個py,語法如下
cd C:\Users\Administrator\Desktop\XXX
start python Runstart.py
timeout /nobreak /t 7
由於有很多支py
我想要讓bat檔自己驗證這段語法是不是有執行成功
我想要的語法是: 如果這有執行成功,繼續執行下一段指令,如果執行失敗,則暫停該失敗的指令
想請問版上大大有教學嗎

看更多先前的討論...收起先前的討論...
alien663 iT邦研究生 4 級 ‧ 2023-01-06 17:00:54 檢舉
cmd try catch
benny296 iT邦新手 5 級 ‧ 2023-01-06 17:18:07 檢舉
感謝大大回復 我的問題不夠清楚 抱歉
我是想要讓bat檔自己驗證這段語法有沒有成功執行~
TG iT邦新手 4 級 ‧ 2023-01-06 17:27:30 檢舉
可以先使用log來看執行結果,再透過回傳資料下判斷
首先,你得先確定一件事。
就是你BAT執行的應用,本身會不會回傳任何訊息。

有回傳的回應輸出。才有辦法用BAT來做判斷。
alien663 iT邦研究生 4 級 ‧ 2023-01-07 08:55:58 檢舉
如果出錯,就會有error出來,catch住可以自己選擇要怎樣做。
如果都沒出錯,那就是成功執行。
DennisLu iT邦好手 1 級 ‧ 2023-01-07 17:09:47 檢舉
Windows有一個值 %ERRORLEVEL% 類似Linux平台的 $?
假設執行一隻程式,該程式有定義返回 exitcode,有清楚的定義成敗結果。
那失敗的時候這個值就不是 0 ,成功就是 0 。
這種情況就能在執行程式後的下一行寫IF判斷,來達成要不要繼續下去的需求。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
re.Zero
iT邦研究生 5 級 ‧ 2023-01-06 19:13:18

不確定是不是你想要的(或是能改成你想要的):

## ExitWithCode.py
## 重點在首尾的 "sys"、"sys.exit()";
import sys
## 
myExitCode = None
if(len(sys.argv)>1): ## 如果有附加參數;
	if(sys.argv[1].isnumeric()): ## 如果附加參數是數值;
		myExitCode = int(sys.argv[1]) ## 轉為整數;
## 
sys.exit(myExitCode) ## 結束程式並送出退出碼;
## 

然後,在批次檔(".bat" or ".cmd")內:

@rem GetExitCode.cmd
@echo off
echo LastErrorLevel(ExitCode):[%ErrorLevel%];
@rem "(call )" for resetting the "ErrorLevel";
(call )
echo P01:LastErrorLevel:[%ErrorLevel%];(After:reset)
python.exe ".\ExitWithCode.py" 12
echo P02:LastErrorLevel:[%ErrorLevel%];(12)
python.exe ".\ExitWithCode.py" a
echo P03:LastErrorLevel:[%ErrorLevel%];(a)
python.exe ".\ExitWithCode.py" 34
echo P04:LastErrorLevel:[%ErrorLevel%];(34)

我的輸出:

LastErrorLevel(ExitCode):[34];
P01:LastErrorLevel:[0];(After:reset)
P02:LastErrorLevel:[12];(12)
P03:LastErrorLevel:[0];(a)
P04:LastErrorLevel:[34];(34)

以上述範例之概念,就能在批次檔內,從 %ERRORLEVEL% 變數取得 python script 執行後的 ExitCode (可用以在批次檔內做 if 判斷的依據);
但要注意 %ERRORLEVEL% 的特性 就是了,以免取到被洗掉的資訊。

另,用 start 是開啟另一個執行序,不會把 python script 的結果傳給父執行序的 %ERRORLEVEL% 。

我要發表回答

立即登入回答