विंडोज 7 में, मैं डेट / टाइम स्टैम्प को अपडेट करने के लिए सभी फाइलों को एक डायरेक्टरी में (सबडायरेक्टरीज सहित) कैसे छू सकता हूं?
क्या विंडोज 7 में इसे पूरा करने के लिए एक तंत्र है?
विंडोज 7 में, मैं डेट / टाइम स्टैम्प को अपडेट करने के लिए सभी फाइलों को एक डायरेक्टरी में (सबडायरेक्टरीज सहित) कैसे छू सकता हूं?
क्या विंडोज 7 में इसे पूरा करने के लिए एक तंत्र है?
जवाबों:
कई संभावनाएं हैं:
एक यूनिक्स touch
कमांड के एक पोर्ट का उपयोग करें और बस यूनिक्स तरीके से गठबंधन find
और touch
। कई विकल्प हैं। अक्सर उल्लेखित GNUWin32 , cygwin और unxutils हैं । कम प्रसिद्ध, लेकिन कुछ मायनों में बेहतर, SFUA उपयोगिता टूलकिट में उपकरण हैं , जो UNIX- आधारित अनुप्रयोगों के लिए सबसिस्टम में चलते हैं, जो विंडोज 7 अल्टीमेट संस्करण और विंडोज सर्वर 2008 R2 के साथ बॉक्स में वहीं आता है। (Windows XP के लिए, एक कर सकते हैं डाउनलोड और स्थापित यूनिक्स संस्करण 3.5 के लिए सेवा से।) यह टूलकिट कमांड लाइन TUI उपकरणों की एक बड़ी संख्या है, mv
और du
कॉर्न और सी के गोले के माध्यम से, करने के लिएperl
और awk
। यह x86-64 और IA64 दोनों फ्लेवर्स के साथ-साथ x86-32 दोनों में आता है। cygwin1.dll
Win32 पर चीजें लेयरिंग के साथ-साथ एमुलेटर डीएलएल (जैसे ) के बजाय विंडोज के देशी उचित पॉसिक्स वातावरण में प्रोग्राम चलते हैं । और हां, टूलकिट में touch
और find
साथ ही कुछ 300 अन्य हैं।
इन सभी टूलकिट्स को निश्चित रूप से हर फ़ाइल को छुआ जाने के लिए एक अलग प्रक्रिया चलाने का सुविज्ञ नुकसान है। यह निम्नलिखित विकल्पों के साथ एक समस्या नहीं है।
कई मूल Win32 touch
आदेशों में से एक का उपयोग करें जिसे लोगों ने लिखा और प्रकाशित किया है। उनमें से कई लोगों ने अपने find
चारों ओर लपेटने के लिए यूनिक्स की आवश्यकता के बिना, पुनरावृत्ति करने के लिए विकल्पों का समर्थन किया। (वे, सब के बाद, एक उपयोगकर्ताबेस को लक्षित कर रहे हैं जो एक touch
कमांड की तलाश कर रहा है क्योंकि इसमें पोर्ट यूनिक्स कमांड का पूरा भार नहीं है।) ऐसा ही एक स्टीफन डुगुए का हैtouch
, जैसा कि आप देख सकते हैं कि एक --recursive
विकल्प है।
CMD के रहस्यमय रहस्यों के साथ चतुर हो जाओ। जैसा कि अन्य उत्तर में उल्लेख किया गया है, कमांड COPY /B myfile+,,
के अल्प-ज्ञात "प्लस" सिंटैक्स का उपयोग करके एक फ़ाइल के अंतिम संशोधन डेटस्टैम्प को अपडेट करेगा COPY
(अधिक जिस पर यहां पाया जा सकता है , संयोग से)। यह निश्चित रूप FOR /R
से ऑपरेशन को फिर से करने के लिए जोड़ा जा सकता है , जैसा कि यहां एक अन्य उत्तर में संकेत दिया गया है।
एक प्रतिस्थापन कमांड दुभाषिया का उपयोग करें और सीएमडी की तुलना में कम चालाक और अधिक सीधा हो। JP Software का TCC / LE एक ऐसा है। यह अपने कमांड में एक /S
विकल्प जोड़ता है , जिसका अर्थ है कि एक आवरण की आवश्यकता को समाप्त करने के लिए "प्लस" सिंटैक्स के साथ उपयोग कर सकता है । लेकिन यह वास्तव में अभी भी अपने आप के लिए जीवन को अनावश्यक रूप से कठिन बना रहा है, यह देखते हुए कि टीसीसी / एलई को एक निर्माण में बनाया गया है जो सीधे एक विकल्प का समर्थन करता है।COPY
COPY /S
FOR
/S
COPY /B file+,,
का रास्ता है, इसके लिए किसी अतिरिक्त की आवश्यकता नहीं है ... :-)
(ls file).LastWriteTime = DateTime.now
चूंकि वे आसानी से उपलब्ध हैं, मैं अनएक्सूटिल्स का लाभ उठाने की सलाह दूंगा । इनमें वे कमांड find
और touch
कमांड शामिल हैं जो इसे बहुत आसान बनाएंगे।
सबसे ऊपरी निर्देशिका में बदलने के बाद आप संशोधित करना चाहते हैं:
खोजो। -Type f -exec स्पर्श {} +
केवल मौजूदा विंडोज कार्यक्षमता का उपयोग करने के लिए (कुछ भी स्थापित करने के लिए अतिरिक्त नहीं) इनमें से एक का प्रयास करें:
forfiles /P C:\Path\To\Root /S /C "cmd /c Copy /B @path+,,"
(निर्दिष्ट पथ में शुरू होने वाली सभी फ़ाइलों को पुन: "स्पर्श" करें)
या
forfiles /S /C "cmd /c Copy /B @path+,,"
(वर्तमान निर्देशिका में शुरू होने वाली सभी फ़ाइलों को "स्पर्श करें"
मुझे पता है कि यह शायद थोड़ा बहुत देर हो चुकी है, लेकिन फिर भी, मैं अपना जवाब अभी छोड़ दूंगा जब किसी और को उसी चीज की जरूरत होगी।
जॉन टी का जवाब मेरे लिए विंडोज 7 पर काम नहीं करता था। कुछ शोध के बाद मुझे एसकेटीस्टैम्प नाम की यह उपयोगिता मिली , जो पूरी तरह से काम करती है।
यहाँ यह कैसे काम करता है पर अधिक विवरण के साथ एक लेख है: http://www.trickyways.com/2009/08/how-to-change-timestamp-of-a-file-in-windows-file-created-modified-and -अनुकूलित / ।
यहां वे चरण हैं जिन्हें आपको करने की आवश्यकता है:
देखा! आपकी सभी फाइलें अपडेट हो चुकी हैं! किसी भी यूनिक्स बर्तन या कमांड लाइन की आवश्यकता नहीं है।
या आप पहले से ही विंडोज में निर्मित टूल का उपयोग कर सकते हैं, जब आपके पास पहले से ही किसी प्रकार का "टच" टूल है:
for /r %i in (C:\Path\To\Root\*) do @touch "%i"
या
forfiles /P C:\Path\To\Root /S /C "touch @file"
(एनबी: यदि आप बैच फ़ाइल से ऐसा कर रहे हैं और for
कमांड का उपयोग करना चाहते हैं , तो अपने चर के लिए दोहरे प्रतिशत संकेतों का उपयोग करना सुनिश्चित करें। (जैसे %%i
इसके बजाय %i
)
पॉवरशेल का उपयोग करना:
C:\> powershell (ls your-file-name-here).LastWriteTime = Get-Date
The property 'LastWriteTime' cannot be found on this object.
ऊपर जॉन टी के जवाब के संदर्भ में:
मैं find
' a ' \;
और 'a +' के साथ कमांड को समाप्त करने के बीच के अंतर को समझने की कोशिश कर रहा था (मुझे बाद का पता नहीं था)।
यह उपयोगी था: ( यहाँ से )
-exec command ;
निष्पादित आदेश; सच है अगर 0 स्थिति वापस आ गई है। निम्नलिखित सभी तर्कों को ''; सामना किया है। स्ट्रिंग '{}' को वर्तमान फ़ाइल नाम से बदल दिया जाता है जिसे हर जगह संसाधित किया जाता है यह कमांड के तर्कों में होता है, न कि केवल उन तर्कों में जहां यह अकेला है, जैसा कि कुछ संस्करणों में पाया जाता है।
-exec command {} +
-Exec कार्रवाई का यह संस्करण चयनित फ़ाइलों पर निर्दिष्ट कमांड चलाता है, लेकिन कमांड लाइन अंत में प्रत्येक चयनित फ़ाइल नाम को जोड़कर बनाया गया है; कमांड की कुल संख्याओं की संख्या मिलान की गई फ़ाइलों की संख्या से बहुत कम होगी। कमांड लाइन उसी तरह से बनाई गई है जिस तरह से xargs अपनी कमांड लाइन बनाता है। कमांड के भीतर '{}' के केवल एक उदाहरण की अनुमति है। कमांड को प्रारंभिक निर्देशिका में निष्पादित किया जाता है।
c:\myfolder
2 फ़ाइलों वाले फ़ोल्डर पर विचार करें a.txt
औरb.txt
find . -type f -exec touch {} +
के रूप में व्याख्या की है: touch a.txt b.txt
find . -type f -exec touch {} \;
इसकी व्याख्या इस प्रकार है:touch a.txt
touch b.txt
इस प्रकार, # 1 बहुत तेज है (लेकिन यह भी सीमा से ग्रस्त है कि निम्नलिखित कमांड exec
में केवल एक ही {}
प्लेसहोल्डर हो सकता है)।