वैकल्पिक # 1: मेरे लिए # 2 की तुलना में / R अधिक सहज है।
वैकल्पिक # 2: फ़ॉर / एफ ब्रायनएडकिंस के सुझाव में "नामों में रिक्त स्थान" के साथ समस्या को ठीक करता है।
वैकल्पिक # 3: FORFILES मेरी पसंद होगी सिवाय इसके कि पथ दोहरे उद्धरण चिह्नों में है।
ब्रायन या अन्य गुरुओं के पास अधिक सुरुचिपूर्ण समाधान हो सकता है या एक दर्जन अन्य समाधानों का सुझाव देने में सक्षम हो सकता है लेकिन ये तीन काम करते हैं। मैंने TOKENS का उपयोग करने की कोशिश की, लेकिन फिर हेडर और फुटर को उतारना पड़ा, इसलिए मैं वापस # 1 पर वापस आ गया। मैंने एक छोटी .bat फ़ाइल बनाने और इसे कॉल करने पर भी विचार किया था, लेकिन यह एक और फ़ाइल जोड़ता है (हालांकि यह अधिक लचीलापन प्रदान करता है, जैसा कि एक फ़ंक्शन होता है)।
मैंने एम्बेडेड स्पेस के साथ डायरेक्टरी और फाइलनाम के साथ सभी विकल्पों का परीक्षण किया, एक 200+ कैरेक्टर का नाम, बिना किसी एक्सटेंशन वाला एक फ़ाइल नाम, और एक छोटी ड्राइव (केवल समय के लिए; थोड़ी धीमी गति से) - जैसे कि ब्रायन ने सुझाव दिया - लेकिन तब विंडोज एक्सप्लोरर में खोज कर रहा है (यही कारण है कि मैंने सब कुछ खोज ऐप इंस्टॉल किया है)।
वैकल्पिक # 1: के लिए / आर
सर्वश्रेष्ठ (?) यह जानने की कोशिश करते हुए कि ब्रायन का समाधान मेरे लिए काम नहीं कर रहा था, मैंने मदद के लिए देखा और / आर दृष्टिकोण की कोशिश करने का फैसला किया। (फ़ाइल बनाना वैकल्पिक # 2 के समान होगा।)
@echo off & for /R "c:\deletelater\folder with spaces" %A in (*.*) do echo %~fA %~zA
उदाहरण - काम करता है (पुनरावृत्ति प्रदर्शित करने के लिए ऊपर से अलग निर्देशिका)
@echo off & for /R "c:\deletelater" %A in (*.*) do echo %~fA %~zA
c:\DeleteLater\Name with Spaces.txt 19800676
c:\DeleteLater\NoSpacesLongName.txt 21745440
c:\DeleteLater\Folder with Spaces\2nd Name with Spaces.txt 5805492
c:\DeleteLater\Folder with Spaces\2ndNoSpacesLongName.txt 3870322
c:\DeleteLater\FolderNoSpaces\3rd Name with Spaces.txt 27874695
c:\DeleteLater\FolderNoSpaces\3rdNoSpacesLongName.txt 28726032
वैकल्पिक # 2: के लिए / एफ
ब्रायन एडकिंस ने सुझाव दिया: @echo off & for /f %a in ('dir /s /b') do echo %~fa %~za
एक सही उत्तर है:
@echo off & for /f "delims=*" %A in ('dir /s /b') do echo %~fA %~zA
एक फ़ाइल में दबाए गए आउटपुट और आउटपुट (संलग्न) के साथ एक और अधिक पूर्ण उत्तर है:
@echo Results on %DATE% for %CD% >> YourDirFile.txt & echo off & for /f "delims=*" %A in ('dir /s /b /a:-d') do echo %~fA %~zA >> YourDirFile.txt
नोट: "delims = *" एक वर्ण निर्दिष्ट करता है जिसे फ़ाइल नाम में अनुमति नहीं है।
नोट: 2 डी कमांड / a: -d के माध्यम से निर्देशिकाओं को भी दबा देता है।
नोट: यदि कोई भिन्न चर नाम चुनता है, तो चर और बड़े मापदंडों के बीच अंतर को स्पष्ट करने के लिए परिवर्तनशील नाम के लिए बनाया गया।
नोट: ओपी ने फ़ाइल के लिए आउटपुट के रूप में सिर्फ अनुदान के लिए फाइल करने के लिए आवेदन किया।
मुझे लगता है कि मुझे वास्तव में ईसीएचओ की स्थिति की जांच करनी चाहिए और इसे भी रीसेट करना चाहिए।
अंक - नामों में स्थान
ब्रायन का प्रस्तावित समाधान रिक्त स्थान वाले फ़ाइल और फ़ोल्डर नामों को नहीं संभालता है (कम से कम मेरे विस्टा कॉन्फ़िगरेशन पर नहीं)।
उदाहरण - गलत
(बिना परिवाद के; ओपी के अनुसार प्रतिपूर्ति निर्देशिका को शामिल करना लेकिन जोर देने से पहले और बाद में आकार दोनों के साथ)
काटे गए नाम और आकार (गलत 6 फाइलों में से 4):
@echo off & for /f %A in ('dir /s /b /a:-d') do echo %~zA %~fA %~zA
C:\DeleteLater\Name
21745440 C:\DeleteLater\NoSpacesLongName.txt 21745440
C:\DeleteLater\Folder
C:\DeleteLater\Folder
C:\DeleteLater\FolderNoSpaces\3rd
28726032 C:\DeleteLater\FolderNoSpaces\3rdNoSpacesLongName.txt 28726032
उदाहरण - सही
(नोट आउटपुट स्क्रीन पर, फ़ाइल में संलग्न नहीं)
@echo off & for /f "delims=*" %A in ('dir /s /b /a:-d') do echo %~fA %~zA
C:\DeleteLater\Name with Spaces.txt 19800676
C:\DeleteLater\NoSpacesLongName.txt 21745440
C:\DeleteLater\Folder with Spaces\2nd Name with Spaces.txt 5805492
C:\DeleteLater\Folder with Spaces\2ndNoSpacesLongName.txt 3870322
C:\DeleteLater\FolderNoSpaces\3rd Name with Spaces.txt 27874695
C:\DeleteLater\FolderNoSpaces\3rdNoSpacesLongName.txt 28726032
वैकल्पिक # 3: FORFILES (भाव जारी)
यह समाधान FORFILES प्रलेखन ( forfiles /?
) में अंतिम दो उदाहरणों से सीधा है ।
FORFILES /S /M *.doc /C "cmd /c echo @fsize"
FORFILES /M *.txt /C "cmd /c if @isdir==FALSE notepad.exe @file"
इन उदाहरणों को लिखने और फ़ाइल में लिखने से उत्तर मिलता है (लगभग):
forfiles /s /c "cmd /c if @isdir==FALSE echo @path @fsize" >>ForfilesOut.txt
ध्यान दें कि पथ आउटपुट में उद्धरण में है।
इस बात से कोई फर्क नहीं पड़ता कि टॉगल किया गया है echo on
या नहीं echo off
।
प्रत्येक निर्देशिका को अलग करने वाली एक रिक्त पंक्ति को जोड़ना IF का एक तुच्छ विस्तार होगा।
सावधानी : मास्क का उपयोग/m *.*
एक्सटेंशन के बिना फ़ाइलों को वापस नहीं करेगा (उदाहरण में अंतिम फ़ाइल)!
एक तरफ : यह प्रत्येक निर्देशिका में उस निर्देशिका की सामग्री के साथ एक फ़ाइल लिखता है:
forfiles /s /c "cmd /c if @isdir==FALSE echo @path @fsize >>ForfilesSubOut.txt"
ओपी नहीं चाहता था लेकिन कभी-कभी काम करता है।
उदाहरण - काम करता है (लेकिन उद्धरण में पूर्णपथ के साथ)
forfiles /s /c "cmd /c if @isdir==FALSE echo @path @fsize"
"c:\DeleteLater\Name with Spaces.txt" 19800676
"c:\DeleteLater\NoSpacesLongName.txt" 21745440
"c:\DeleteLater\Folder with Spaces\2nd Name with Spaces.txt" 5805492
"c:\DeleteLater\Folder with Spaces\2ndNoSpacesLongName.txt" 3870322
"c:\DeleteLater\FolderNoSpaces\3rd Name with Spaces.txt" 27874695
"c:\DeleteLater\FolderNoSpaces\3rdNoSpacesLongName.txt" 28726032
"c:\DeleteLater\MoreFiles\A really really long file name that goes on and on 123456789 asdfghjkl zxcvnm qwertyuiop and still A really really long file name that goes on and on 123456789 qwertyuiop and still further roughly 225 characters by now.txt" 447
"c:\DeleteLater\MoreFiles\New Text Document no extension" 0
इस उदाहरण में एक सुपर लंबी फ़ाइल नाम के साथ एक अतिरिक्त निर्देशिका और बिना किसी एक्सटेंशन के फ़ाइल नाम शामिल है।
समस्या: उद्धरण में पथ
तो, क्या ओपी उदाहरण के अनुसार अवांछित (?) उद्धरणों को हटाने का एक आसान तरीका है और वैकल्पिक # 3 को बचाने के लिए: FORFILES। (अलंकारिक प्रश्न: क्या उद्धरण एक विशेषता या दोष हैं?)
"tokens=*"
प्रकार जोड़ा@echo off & for /f "tokens=*" %a in ('dir /s /b') do echo %~fa %~za