2012-10-23 9 views
7

से बैच प्रोग्रामिंग सेटिंग ERRORLEVEL मुझे बैच स्क्रिप्ट्स को कॉल करने वाले प्रोग्राम में त्रुटि स्तर की रिपोर्ट करने की आवश्यकता मिली है।असफल FIND कमांड

स्क्रिप्ट एक सीएसवी लॉग फ़ाइल तैयार करेगी जिसे मैं प्रदर्शित करने के लिए जांचना चाहता हूं कि स्क्रिप्ट सफलतापूर्वक चल रही है या नहीं।

मैं क्या कह चाहते हैं,

IF NOT FIND "[ERR" "test.csv" 

या कहने के लिए कुछ ऐसा है कि अगर स्ट्रिंग "[ERR" उत्पादन ERRORLEVEL = 0 ELSE ERRORLEVEL = 1

आशा में नहीं है यह समझ में आता है। मुझे यकीन है कि यह आसान है लेकिन त्रुटि स्तर को सेट करना एक $ se में शाही दर्द लगता है!

उत्तर

10

ढूंढें "[ईआरआर" "text.csv" कम से कम एक [ERR पाया जाता है, और 1 यदि कोई [ERR पाया जाता है तो त्रुटि को 0 से ERRORLEVEL सेट करता है। आपको तर्क को उलटने के लिए एक तरीका चाहिए।

तो तुम सब करने की तुरंत 0 लौट रहा है तो कोई [ERR पाया, या 1 यदि कम से कम एक [ERR पाया चाहते हैं, तो मैं प्रयोग करेंगे निम्नलिखित:

find "[ERR" "test.csv" >nul && exit /b 1 || exit /b 0 

आप में परिणाम पर कब्जा करना चाहते हैं एक चर, बाद में वापस करने तो:

find "[ERR" "test.csv" >nul && set "err=1" || set "err=0" 

या

find "[ERR" "test.csv" >nul 
set /a "err=!%errorlevel%" 

जब आप परिणाम

exit /b %err% 

नीचे वापस जाने के लिए तैयार कर रहे हैं है अपने मूल जवाब यह है कि तर्क त्रुटि उनका कहना है के लिए स्वीकार कर लिया गया है, फिर भी था शर्मनाक गलत :-(
धन्यवाद कोरी । जैसा कि वह अपनी टिप्पणी में कहते हैं, नीचे दोषपूर्ण कोड केवल एक त्रुटि की रिपोर्ट करेगा यदि सभी पंक्तियों में [ERR टेक्स्ट है।

FIND यदि पाया नहीं गया तो 1 ERRORLEVEL को 0 पर सेट करेगा। तर्क को रिवर्स करने के लिए, बस/V विकल्प का उपयोग करें।

find /v "[ERR" "test.csv" >nul 

आप एक चर सेट कि errorlevel इंगित करता है, तो आप उपयोग बाहर निकलें/बी ERRORLEVEL

set err=1 
exit /b %err% 
+0

हाय डबेंहम, आपके उत्तर के लिए धन्यवाद लेकिन दुर्भाग्यवश बस/वी को लगता है कि त्रुटिशील हमेशा हमेशा 0 पर सेट हो रहा है। इसके अलावा मैंने दूसरी प्रतिक्रिया का परीक्षण करने के लिए इस बैच फ़ाइल का उपयोग करने का प्रयास किया है। FIND "[ERR" " test.csv "सेट MyERROR = 1 EXIT/B% MYERROR% जब मैं% errorlevel% गूंजता हूं तो यह हमेशा 1 वापस आना चाहिए, लेकिन यह केवल तभी होगा यदि [ERR test.csv फ़ाइल में नहीं है! क्या मैं वाक्यविन्यास के साथ कुछ गलत कर रहा हूँ? सभी 3 कथन अलग-अलग लाइनों पर हैं लेकिन मुझे इसका प्रतिनिधित्व करने के लिए एक नई लाइन शुरू करने में सक्षम नहीं लगता है! आपके उत्तर से पहले धन्यवाद! –

+2

dbenham! इस बार फिर से चलने के बाद, मैंने पाया कि मैंने डॉस स्कूली लड़के की त्रुटि क्या की है! मैंने err = 1 के बजाय त्रुटि = 1 सेट किया है। इसे पढ़ने के लिए किसी और के लिए, इसका अर्थ यह है कि, जब आप एसईटी ईआरआर = 1 टाइप करते हैं तो परिवर्तनीय नाम 'ईआरआर' नहीं 'ईआरआर' होता है। धन्यवाद! –

+1

'/ V' निर्दिष्ट करने से केवल विफलता होगी (ERRORLEVEL == 1) यदि फ़ाइल में * सभी * पंक्तियों में निर्दिष्ट मान होता है। यह परीक्षण से उलट जाता है * इसमें x * से * x * नहीं होता है, ERRORLEVEL 0 होने पर, यदि कोई पंक्तियां मिलती हैं जो परीक्षण से मेल खाते हैं। – Corey

1

सेट करने के लिए कर सकते हैं इस तर्क मैं एक बैट में इस्तेमाल किया गया है पहले फाइल करें।

find "string" "test.txt" > NUL & IF ERRORLEVEL 1 (
    ECHO String was NOT found 
) ELSE (
    ECHO String was found 
) 

आप IF/ELSE ब्लॉक के अंदर जो भी आदेश चाहते हैं उसे डाल सकते हैं।

0

ध्यान दें कि IF कमांड में यह तर्क है कि यह सच है यदि ERRORLEVEL से अधिक या उसके बराबर है तो निम्न संख्या!तो

IF ERRORLEVEL 0 (... 

सभी FIND आदेशों के लिए सत्य लौटाता है। आपको क्या करना होगा कि आप केवल तभी एक मुहावरा एक फ़ाइल में है का परीक्षण करना चाहते हैं:

find "string" "test.txt" > NUL & IF NOT ERRORLEVEL 1 ECHO String was found 

कि बाहर काम करने के लिए मुझे उम्र लिया!

+0

'&&' 'अगर नहीं ERRORLEVEL 1' के लिए शॉर्टकट का एक प्रकार है, तो आप अपनी लाइन को" ढूंढें "स्ट्रिंग" test.txt "> NUL && echo स्ट्रिंग में पाए जा सकते हैं || गूंज स्ट्रिंग नहीं मिला था – Stephan

संबंधित मुद्दे