2012-02-10 15 views
13

का उपयोग कर तिथि से खोजें तिथि के आधार पर निर्देशिका में फ़ाइलों को खोजने का कोई तरीका है? मैं एक विशिष्ट तारीख से अधिक बनाई गई तारीख के साथ सभी फाइलें खोजना चाहता हूं, क्या यह dir कमांड के साथ करना संभव है?कमांड लाइन

+0

'dir कुछ/OD', तिथि के अनुसार छाँटें होगा कम से कम – nolegs

+1

dir नहीं कर सकते हैं, लेकिन लगता है यूनिक्स कमांड * कर सकते है *। [यहां उपलब्ध डॉस पोर्ट] (http://sourceforge.net/projects/unxutils/) –

+0

सुपरयूसर पर http://superuser.com/a/326025/3588 वास्तव में –

उत्तर

4

dir अपने आप में तिथि के अनुसार फ़िल्टर नहीं कर सकते, लेकिन आप for कमांड का उपयोग कर dir के आउटपुट को पार्स कर सकते हैं। यदि आपके देश में dir वाईएमडी प्रारूप में दिनांक प्रिंट करता है, तो आपको केवल उस तारीख के साथ इसकी तुलना करने की आवश्यकता है। यदि दिनांक भागों का क्रम अलग है, तो आपको तारीख को पार्स करने और इसे YMD में बदलने के लिए for कमांड का उपयोग करना होगा। यह 5 वीं Februrary के बाद संशोधित फ़ाइलों की एक सूची प्रदर्शित करेगा।

@Echo Off 

for /f "usebackq tokens=1,4 skip=5" %%A in (`dir /-c`) do (
    if %%A GTR 2012-02-05 echo %%A %%B 
) 

if तो अंत में आप अतिरिक्त लाइन सारांश रेखा तुलना गुजरता है, तो प्राप्त कर सकते हैं मानक स्ट्रिंग तुलना करता है,। यह बचने के लिए आप if %%A GTR 2012-02-05 if exist %%B echo %%A %%B

संपादित करें का उपयोग कर सकते हैं: वहाँ और भी बेहतर दृष्टिकोण है जो dir उत्पादन की पार्स से बचा जाता है और उस तिथि के आधार न केवल समय से खोज की अनुमति देता है, यह है:

@Echo Off 

for /r %%A in (*) do (
    if "%%~tA" GTR "2012-02-05 00:00" echo %%~tA %%A 
) 
+0

धन्यवाद, मुझे वही चाहिए जो मैं चाहता हूं, क्या मैं घंटे का उपयोग कर सकता हूं: तुलना के साथ मिनट। अंत में शैल स्क्रिप्टिंग सीखने के लिए उपयोगी किताबें हैं। – developer

+0

तुलना में मिनटों का उपयोग करने के लिए, निम्न परिवर्तन करें: 'टोकन = 1,2,4' और फिर 'अगर%% ए %% बी" जीटीआर "2012-02-05 11:23" echo %% ए %% बी %% सी' सीखने के लिए, आप http://en.wikipedia.org/wiki/Batch_file से शुरू कर सकते हैं और फिर तीन पहले बाहरी लिंक के साथ जारी रख सकते हैं। – MBu

3

वैसे आप जहाँ तक मुझे पता के रूप में वास्तव में बेकार है जब तक आप एक छोटी तिथि सीमा है नहीं कर सकते, लेकिन लगता है कि इस तरह की काम करेंगे, लेकिन अभी भी;)

for /R %a in (01 02 03 04 05) do dir | find "02/%a/2012" 
+0

अच्छा! निर्माण तिथियों के साथ काम करने के लिए 'dir/tc' का प्रयोग करें। – Marc

35

बस forfiles आदेश की खोज की ।

forfiles /s /m *.log /d -7 /c "cmd /c echo @path" 

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

अधिक जानकारी के लिए forfiles /? देखें।

+0

सुपर-उपयोगी! (जब कोई PowerShell उपलब्ध नहीं है) नोट: यदि आप किसी दिनांक के बाद संशोधित फ़ाइलों को चाहते हैं तो आपको '/ d' पैरामीटर के लिए' -' की बजाय '+' की आवश्यकता है, इसलिए '-7/05/2012' की बजाय कुछ' -7 '। प्रत्येक फ़ाइल के लिए दिनांक और समय आउटपुट दिखाने के लिए आप 'cmd/c echo @fdate @ftime @ path' – bob

+4

+1 का उपयोग कर सकते हैं यह स्वीकार्य उत्तर –

+1

चेतावनी होना चाहिए: जो आपको इसके साथ यूएनसी पथ का उपयोग करना चाहते हैं, वह शर्त लगाता है। या विंडोज़ में कई अन्य स्थानों में ... –

0

PowerShell के साथ यह करना आसान है। मुझे पता है कि आपका प्रश्न cmd के बारे में था, लेकिन पीएस 7 और बाद में विंडोज़ में शामिल है। इसे एक्सपी और विस्टा पर भी इंस्टॉल किया जा सकता है।

सभी फ़ाइलों को प्राप्त करने के लिए Get-ChildItem कमांड (dir के रूप में उपनाम) का उपयोग करें। आउटपुट को Where-Object कमांड (? के रूप में उपनामित) पर पाइप करें ताकि उन तारीखों को वापस कर सकें जहां दिनांक अधिक है (-gt) एक विशिष्ट तिथि।

PowerShell 2.0 (विंडोज 7 पर डिफ़ॉल्ट), आप एक scriptblock का उपयोग करना चाहिए के लिए:

dir -file | ? {$_.LastWriteTimeUtc -gt ([datetime]"2013-05-01")} 

PowerShell 3.0 (Windows 8 पर डिफ़ॉल्ट) और इसके बजाय आप इस सरल वाक्य विन्यास का उपयोग कर सकते हैं के लिए:

dir -file | ? LastWriteTimeUtc -gt ([datetime]"2013-05-01") 

dir -file कमांड System.IO.FileInfo ऑब्जेक्ट्स का संग्रह देता है। इस फ़ाइल ऑब्जेक्ट में कई गुण हैं जिनका उपयोग आप जटिल फ़िल्टरिंग (फ़ाइल आकार, निर्माण दिनांक इत्यादि) के लिए कर सकते हैं। दस्तावेज के लिए MSDN देखें।

+0

मैंने कोशिश की: डीआईआर। * एसएसजीजी | ? LastWriteTimeUtc -gt ([डेटाटाइम] "2013-05-01") लेकिन "ऑब्जेक्ट: पैरामीटर" फ़िल्टरस्क्रिप्ट को बाध्य नहीं कर सकता है। "System.String " टाइप करने के लिए "LastWriteTimeUtc" मान को परिवर्तित नहीं किया जा सकता है "सिस्टम। प्रबंधन .ऑटोमेशन.स्क्रिप्टब्लॉक "। –

+0

मैं जिस वाक्यविन्यास का उपयोग करता हूं, वह PS 3.0 के लिए काम करता है और मुझे विश्वास है। अगर आपके पास PS 1.0 या 2.0 है, तो आपको एक स्क्रिप्टब्लॉक का उपयोग करना चाहिए:' |? {$ _। LastWriteTimeUtc -gt ([डेटाटाइम] "2013-05-01")} ' – bouvierr

+0

आह मैं पीएस 2 के साथ विंडोज 7 पर हूं। धन्यवाद –

2

मेरे लिए एक आसान तरीका की तरह

dir /s *.xlsx | find "07/14/2016"