2009-05-24 18 views
14

मैं एक बड़ी बैच फ़ाइल स्क्रिप्ट कर रहा हूं।बैच फ़ाइल में .txt फ़ाइल से टेक्स्ट प्रदर्शित करें

यह एक log.txt फाइल करने के लिए तारीख रिकॉर्ड:

@echo off 
echo %date%, %time% >> log.txt 
echo Current date/time is %date%, %time%. 
@pause 
exit 

यह इसे कई बार, रिकॉर्ड कर सकते हैं कई लाइनों पर। अब मैं क्या करना चाहता हूं कि बैच फ़ाइल फ़ाइल लॉग.txt फ़ाइल से अंतिम दर्ज दिनांक/समय दिखाती है।

कैसे?

+0

अच्छा प्रश्न के नए दिनांक और समय जोड़ें। मैंने कल अपनी पहली कुछ उन्नत बैच लिपि लिखी थी, और मैं इसका आनंद ले रहा था। बैच स्क्रिप्टिंग मजेदार और एक बहुत शक्तिशाली उपकरण है, लेकिन मुझे कुछ सरल कार्यों को भी हासिल करना मुश्किल होता है। –

+1

और वास्तविक उत्तर निश्चित रूप से है: यदि इसे किसी भी चीज की आवश्यकता होती है जो बैच एक साधारण एकल-रेखा अभिव्यक्ति में संभाल नहीं सकता है, तो बस एक छोटा प्रोग्राम लिखें। यह चोट नहीं पहुंचाता है;) – viraptor

उत्तर

5

हम्म .. बस पाया जवाब। मैंने सोचा आसान है तो मैंने सोचा। इसे सिर्फ एक गुच्छा की आवश्यकता है:

@echo off 
if not exist log.txt GOTO :write 
echo Date/Time last login: 
type log.txt 
del log.txt 
:write 
echo %date%, %time%. >> log.txt 
@pause 
exit 

तो यह पहले log.txt फ़ाइल को पढ़ता है और इसे हटा देता है। उसके बाद यह & दिनांक के साथ बस एक नई फ़ाइल (log.txt) प्राप्त करें!

मुझे आशा है कि इससे अन्य लोगों की मदद मिलेगी!

(केवल समस्या यह है कि पहली बार यह काम नहीं करता है, लेकिन फिर बस log.txt पर यादृच्छिक मूल्य में दर्ज करें।) (यह समस्या हल हो और संपादित किया जाता है।)

+2

यदि यह वास्तव में आपकी समस्या हल करता है, तो आपको लॉग फ़ाइल में (>>) जोड़ना नहीं चाहिए। लेकिन, यह मूल समस्या कथन के आधार पर लग रहा था, कि आप एक इतिहास रखना चाहते थे, इसे हर बार हटाएं नहीं। –

+0

यह केवल log.txt पर वर्तमान दिनांक/समय लिख देगा, लेकिन मूल लॉग फ़ाइल से कुछ भी पुनर्प्राप्त नहीं करेगा, जैसा कि आपके मूल प्रश्न के लिए कहा गया था। – devio

+0

यह पहली 2 पंक्तियों में करता है: echo .... टाइप करें ... –

24
type log.txt 

लेकिन यह आपको पूरी फाइल देगा। आप इसे बदल सकते हैं:

echo %date%, %time% >> log.txt 
echo %date%, %time% > log_last.txt 
... 
type log_last.txt 

केवल अंतिम प्राप्त करने के लिए।

+0

क्या यह सिर्फ log.txt फ़ाइल से अंतिम पंक्ति नहीं हो सकता है, लेकिन उस रेखा से ऊपर? मैंने FINDSTR के बारे में कुछ सुना, लेकिन मैं इसे नहीं ढूंढना चाहता हूं। –

+0

मैं समझता हूं कि आप क्या कह रहे हैं, लेकिन इसे समय के बाद समय के बाद करना चाहिए ... 100x ... जितना संभव हो सके। मैं इसे प्रकाशित करना चाहता हूं और यह बहुत अच्छा होगा। –

3
+0

इसका उपयोग कैसे करें ??? –

+0

पूंछ -1 log.txt – SqlACID

+0

काम करता है, लेकिन ... मुझे अब अपने आप को बिना किसी अतिरिक्त उपकरण के काम करने के लिए मिला है ... –

1

से tail.exe का प्रयोग करें इस प्रयास करें:

for /f "usebackq delims==" %i in (`find "Current date" log.txt`) do (echo %i > log-time.txt) 
type log-time.txt 

: उपयोग "वर्तमान दिनांक/समय" के साथ सभी लाइनों के माध्यम से पुनरावृति, और एक ही फाइल करने के लिए प्रत्येक पंक्ति लिखने के लिए खोजें Delims = किसी वर्ण को दिनांक/समय रेखाओं में प्रासंगिक नहीं सेट करें। बैच फ़ाइलों में %% i का प्रयोग करें।

स्पष्टीकरण (अद्यतन):

ढूँढें खोज स्ट्रिंग वाली log.txt से सभी लाइनों निकालता है।

प्रत्येक पंक्ति के माध्यम से/f loops के अंदर कमांड (...) उत्पन्न करता है।

के रूप में गूंज> लॉग-time.txt (एकल>!) लॉग-time.txt हर बार यह मार डाला है अधिलेखित कर देता है, केवल पिछले मिलान लाइन लॉग-time.txt में रहता है

+0

hmmm। क्या आप विस्तार से समझा सकते हैं कि यह क्या करता है? –

1

यहाँ एक संस्करण है कि नहीं करता है 'टी असफल हो log.txt याद आ रही है:


@echo off 
    if not exist log.txt goto firstlogin 
    echo Date/Time last login: 
    type log.txt 
    goto end 

:firstlogin 
    echo No last login found. 

:end 
    echo %date%, %time%. > log.txt 
    pause 
1

ठीक है मुझे आश्चर्य है कि जब फायदा नहीं है लेकिन, यहाँ दो snipets आप इस्तेमाल कर सकते हैं कर रहे हैं:

lastlog.cmd

@echo off 
for /f "delims=" %%l in (log.txt) do set TimeStamp=%%l 
echo %TimeStamp% 

बदलें "गूंज .." लाइन, लेकिन पिछले लॉग समय % टाइमस्टैम्प% के भीतर है।कोई अस्थायी फ़ाइलें उपयोग नहीं की जातीं, कोई अव्यवस्था नहीं होती है और पुन: प्रयोज्य होती है क्योंकि यह एक चर में है।

दूसरी ओर, अगर आप अपने कोड के भीतर इस पता करने के लिए, और एक और बैच से नहीं की जरूरत है, के लिए अपने प्रवेश बदलें:

set TimeStamp=%date%, %time% 
echo %TimeStamp% >> log.txt 

ताकि चर % टाइमस्टैम्प% बाद में जब प्रयोग करने योग्य है तूम्हे इस्कि जरूरत है।

1

एक काम टाइमस्टैम्प प्रारूप:

%date:~3,2%/%date:~0,2%/%date:~6,2%-%time:~0,8% 
0

यहाँ एक अच्छा दिनांक और समय कोड है:

@echo off 
if %date:~4,2%==01 set month=January 
if %date:~4,2%==02 set month=February 
if %date:~4,2%==03 set month=March 
if %date:~4,2%==04 set month=April 
if %date:~4,2%==05 set month=May 
if %date:~4,2%==06 set month=June 
if %date:~4,2%==07 set month=July 
if %date:~4,2%==08 set month=August 
if %date:~4,2%==09 set month=September 
if %date:~4,2%==10 set month=October 
if %date:~4,2%==11 set month=November 
if %date:~4,2%==12 set month=December 

if %date:~0,3%==Mon set day=Monday 
if %date:~0,3%==Tue set day=Tuesday 
if %date:~0,3%==Wed set day=Wednesday 
if %date:~0,3%==Thu set day=Thursday 
if %date:~0,3%==Fri set day=Friday 
if %date:~0,3%==Sat set day=Saturday 
if %date:~0,3%==Sun set day=Sunday 
echo. 
echo The Date is %day%, %month% %date:~7,2%, %date:~10,4% the current time is: %time:~0,5% 
pause 

आउटपुट: दिनांक रविवार, सितंबर 27, 2009 वर्तमान समय है: 3: 07

+0

7 पर काम नहीं करता है। प्राप्त करें: 'तिथि है, 0-, 00 9 वर्तमान समय है: 12:00 –

+0

ऐसा इसलिए हो सकता है क्योंकि मेरा खिड़कियां एक और भाषा में है? –

0
@echo off 
set log=%time% %date% 
echo %log% 

यह दिनांक और समय को अस्थायी चर के रूप में सहेजने और इसे प्रदर्शित करने के लिए एक बैच है। जल्दी में, मेरे पास एक txt खोलने के लिए एक स्क्रिप्ट लिखने का समय नहीं है, शायद बाद में।

1

बस चर के समय और तिथि निर्धारित करता है, तो यह कुछ है कि एक पाश में हो जाएगा हो जाएगा तो

:top 
set T=%time% 
set D=%Date% 

echo %T%>>log.txt 
echo %d%>>log.txt 
echo time:%T% 
echo date:%D% 
pause 
goto top 

मैं के fromt में

@echo off 

रख कर यह अच्छे और साफ करने का सुझाव देते हर चीज यह क्रैपी सी से छुटकारा पाती है:/उपयोगकर्ता/उदाहरण/...

और

cls 

:top के बाद स्क्रीन स्पष्ट करने के लिए इससे पहले कि यह प्रदर्शन

+0

लेकिन यह लॉग फ़ाइल की अंतिम पंक्ति (ओं) प्राप्त करने के लिए प्रश्न का उत्तर नहीं है – jeb

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