2014-01-07 95 views
0

我有一個執行測試並打印通過或未通過命令行的python腳本。 我想從批處理文件中持續運行此腳本,直到失敗。 所以我需要從我的批處理文件中解析腳本的輸出,並且「goto start」 或繼續結束批處理文件。如何在批處理文件中查找出現字符串輸出命令

我做了一些研究,似乎我需要使用for/f命令,但我不知道如何在整個輸出中查找字符串。

可以說我的腳本叫做test.py,我想在它的輸出中尋找字符串「PASS」。使用for/f命令的確切語法是什麼?

我也對其他解決方案開放。

回答

1

如果您希望腳本繼續,如果你的Python腳本的輸出PASS那麼這應該做的伎倆 -

:loop 
For /F %%a in ('test.py') do set output=%%a 
if "%output%"=="PASS" goto :loop 

如果沒有最後的if語句後有添加任何它將只結束腳本,如果你想要,你可以在if語句後面加上goto :EOF(文件結束)。

+0

所以「if」%output%「==」PASS「」會測試通過是否在輸出,不等於它? – Siavash

+0

如果您的python腳本的輸出爲'PASS',批處理腳本將繼續。如果它不是'PASS',批處理腳本將結束。 – unclemeat

+0

我正在尋找的解決方案是在整個系列中尋找「通過」的東西。所以即使投入是「測試1次通過」,它也會評估爲通過。測試子字符串的條件是什麼? – Siavash

1

根本不需要使用FOR /F

@echo off 
:loop 
test.py|find /i "pass" >nul 
if NOT errorlevel 1 goto loop 

如果蟒輸出含有pass任何線(/i使其不區分大小寫 - find "PASS"將區分大小寫)然後errorlevel被設置爲0否則,errorlevel設置>0

IF ERRORLEVEL n如果errorlevel是n 或大於n爲TRUE。 IF ERRORLEVEL 0因此始終爲真,因此您需要if not errorlevel 1才能測試errorlevel 0

+0

這實際上是最好的解決方案,但由於這是一個知識庫,我選擇了以最初的預期方式解決問題的答案作爲最佳答案。謝謝 – Siavash

-1

而不是批量處理,爲什麼不在你的test.py

while true: 
    ... do your stuff 
    ... 
    if result == "FAIL" 
     break 
call some other commands .... 
+0

因爲我不應該修改python腳本。 – Siavash

+0

downvoter必須是ixxxt – brianadams

相關問題