2012-02-19 14 views
9

मैं कुछ काम करने के लिए एक बैच फ़ाइल में लिखने के लिए आवश्यक कर रहा हूँ में आज की तारीख के साथ एक संशोधित फ़ाइल तिथि तुलनाएक बैच फ़ाइल

शुरू में मैंने सोचा था कि मेरी समस्या बहुत आसान था - एक txt की संशोधित तिथि पर कब्जा एक निर्दिष्ट निर्देशिका में स्थित फ़ाइल, उस तारीख की वर्तमान तारीख से तुलना करें और यदि वे वही हैं तो कुछ करें। अगर वे कुछ और नहीं करते हैं।

लाइन मैं आज की तारीख पर कब्जा करने का उपयोग करें:

%date% 
लाइनों मैं अपने निर्दिष्ट फ़ाइल के संशोधित तिथि पर कब्जा करने का उपयोग

है:

SET filename="C:\New Folder\New.txt" 
FOR %%f IN (%filename%) DO SET filedatetime=%%~tf 
ECHO %filedatetime:~0,-6% >> %destination% 

उपरोक्त मामले में मैं एम echo का उपयोग करके यह देखने के लिए कि क्या लौटाया गया है और ऐसा लगता है कि तिथि वापस आती है लेकिन मुझे अतिरिक्त जानकारी मिलती है:

2012/02/19 02

मैं जानना चाहता हूं कि उपर्युक्त मूल्यों को कैसे प्राप्त किया जाए, साथ ही साथ तुलनात्मक रूप से उनकी तुलना कैसे करें।

उत्तर

9

मैं dbenham's तरीका पसंद है, लेकिन आप इस तरह से कर सकते हैं आप अपने कोड काम करने के लिए चाहते हैं:

set currentDate=%date% 
SET filename="C:\MyFile.txt" 

FOR %%f IN (%filename%) DO SET filedatetime=%%~tf 
IF %filedatetime:~0, 10% == %currentDate% goto same 

goto notsame 

:same 
echo Dates the same, do some code here 

goto next 

:notsame 
echo Dates NOT the same, do some code here 
goto end 

:next 

विचार यह तुम्हारा मामला आप की जरूरत में सिर्फ काम करने के लिए कैसे जानने लायक होगा यह फिर से।

+5

के लिए एक नया प्रश्न खोला है जो हमेशा काम नहीं कर सकता - यह नहीं करता मेरी मशीन पर नहीं है क्योंकि% date% सप्ताह के दिन के साथ prefixed है। दिनांक स्वरूप लोकेल के आधार पर बदलते हैं, उन चीजों में से एक जो तिथियों को मुश्किल बनाता है। किसी दिए गए मशीन पर कुछ काम करना आम तौर पर आसान होता है, लेकिन सामान्य समाधान अक्सर मुश्किल होता है। – dbenham

+0

पर्याप्त सच है। मैंने आपका जवाब पसंद किया। सप्ताह की चीज़ के दिन के बारे में जानना अच्छा लगता है, बहुत यादृच्छिक। – SmithMart

+0

यह एक आकर्षण की तरह काम करता है। आपने अभी मुझे एक ** ** लात मारने से बचाया :) – akhil

12

बैच में तिथियों के साथ काम करना बहुत कठिन है, तो यह होना चाहिए।

एक ऐसा आदेश है जो इस मामले में आपकी नौकरी को आसान बना सकता है। FORFILES में उन फ़ाइलों को संसाधित करने की क्षमता है जिन्हें किसी विशेष दिनांक से संशोधित किया गया है। इसके उपयोग पर दस्तावेज़ीकरण प्राप्त करने के लिए कमांड लाइन से FORFILES /? का उपयोग करें।

यह सरल आदेश सभी फ़ाइलों है कि आज संशोधित किया गया है सूची जाएगा:

forfiles /m * /d 0 

तो कम से कम एक फ़ाइल पाया जाता है, तो ERRORLEVEL 0 पर सेट है, और ERRORLEVEL 1.

पर सेट है आपके पास एक विशिष्ट फ़ाइल है, इसलिए आप

forfiles /m %filename% /d 0 
if %errorlevel% == 0 (
    echo The file was modified today 
    REM do whatever else you need to do 
) else (
    echo The file has not been modified today 
    REM do whatever else you need to do 
) 

उपर्युक्त करने का एक और संक्षिप्त तरीका है। && ऑपरेटर का उपयोग सशर्त रूप से आदेशों को निष्पादित करने के लिए किया जाता है यदि पूर्व आदेश सफल हुआ, || का उपयोग पूर्व आदेश विफल होने पर आदेशों को सशर्त रूप से निष्पादित करने के लिए किया जाता है। हालांकि, सावधान रहें, आदेश भी निष्पादित होंगे यदि && कमांड विफल हो गए हैं।

forfiles /m %filename% /d 0 && (
    echo The file was modified today 
    REM do whatever else you need to do 
) || (
    echo The file has not been modified today 
    REM do whatever else you need to do 
) 
+0

यह अच्छी तरह से काम करता है, लेकिन क्या यह उत्पन्न होने वाले आउटपुट को चुप करने का कोई तरीका है? – pcnate

+0

@pcnate - निश्चित रूप से, बस stdin और stderr को NUL पर रीडायरेक्ट करें। 'फोर्फ़ाइल/एम% फाइलनाम%/डी 0> नूल 2> नल ... ' – dbenham

+0

@ डीबेनहार्म थक्स। ऐसा लगता है कि यह केवल तभी काम करता है जब '/ d - nn' संशोधित दिनांक से मेल खाता है। '/ D - nn' से नए किसी भी चीज़ से मिलान करने का कोई भी संभावित तरीका? – pcnate

1

टेकनेट आलेख में शामिल टिप्पणियों में उठाए गए मुद्दों के अलावा जो फोरफाइल ForFiles Documentation on Microsoft TechNet दस्तावेज करता है, वहां एक और मुद्दा है जिसका उल्लेख किया गया है, लेकिन केवल तभी जब आप समय क्षेत्र के बारे में अनदेखा करते हैं।चूंकि फोर्फ़ाइल स्थानीय समय में रिपोर्ट की गई संशोधित तारीख का मूल्यांकन करता है, इसलिए 02:01 ईएसटीपुराना02:59 EDT पर संशोधित फ़ाइल की तुलना में यह संशोधित फ़ाइल का इलाज करेगा।