यह बैच स्क्रिप्ट करेगा।
@echo off
set target=%~1
if "%target%"=="" set target=%cd%
setlocal EnableDelayedExpansion
set LF=^
rem Previous two lines deliberately left blank for LF to work.
for /f "tokens=*" %%i in ('dir /b /s /a:-d "%target%"') do (
set ext=%%~xi
if "!ext!"=="" set ext=FileWithNoExtension
echo !extlist! | find "!ext!:" > nul
if not !ERRORLEVEL! == 0 set extlist=!extlist!!ext!:
)
echo %extlist::=!LF!%
endlocal
इसे किसी भी .bat
फ़ाइल के रूप में सहेजें , और इसे कमांड के साथ चलाएं batchfile
(वर्तमान में जो कुछ भी आपने नाम दिया है उसे प्रतिस्थापित करें) वर्तमान निर्देशिका को सूचीबद्ध करने के लिए, या इसके साथ एक पथ निर्दिष्ट करें batchfile "path"
। यह सभी उपनिर्देशिकाओं को खोजेगा।
यदि आप किसी फ़ाइल को निर्यात करना चाहते हैं, तो उपयोग batchfile >filename.txt
(या batchfile "path" >filename.txt
) करें।
व्याख्या
for /f...
लाइन से पहले सब कुछ बस चीजों को सेट करता है: यह खोज करने के लिए लक्ष्य निर्देशिका प्राप्त करता है, विलंबित विस्तार को सक्षम करता है जो मुझे लूप में अद्यतन चर करने देता है और एक नई पंक्ति ( LF
) को परिभाषित करता है जिसका उपयोग मैं नीटर आउटपुट के लिए कर सकता हूं। ओह, और %~1
इसका मतलब है "पहले तर्क प्राप्त करें, उद्धरणों को हटा दें" जो दोगुनी-अप उद्धरणों को रोकता है - देखें for /?
।
लूप उस dir /b /s /a:-d "%target%"
कमांड का उपयोग करता है , लक्ष्य के तहत सभी उपनिर्देशिकाओं में सभी फाइलों की सूची को हथियाने के लिए।
%%~xi
एक्सटेंशन को पूर्ण पथ से बाहर निकालता है जो dir
कमांड रिटर्न करता है।
एक खाली एक्सटेंशन को "FileWithNoExtension" से बदल दिया जाता है, इसलिए आपको पता है कि ऐसी कोई फ़ाइल है - अगर मैंने इसके बजाय एक खाली लाइन जोड़ी है, तो यह बिल्कुल स्पष्ट नहीं है।
संपूर्ण वर्तमान सूची यदि एक find
कमांड के माध्यम से भेजी जाती है , तो विशिष्टता सुनिश्चित करने के लिए। मूल nul
रूप से ब्लैक होल को खोजने के आदेश का पाठ आउटपुट भेजा जाता है - हम इसे नहीं चाहते हैं। चूंकि हम हमेशा :
सूची के अंत में संलग्न होते हैं , इसलिए हमें यह भी सुनिश्चित करना चाहिए कि खोज क्वेरी समाप्त हो :
जाए ताकि यह आंशिक परिणामों से मेल न खाए - टिप्पणियों को देखें।
% ERRORLEVEL% find
कमांड द्वारा सेट किया गया है , 0 का मान इंगित करता है कि कोई मैच था। इसलिए यदि यह 0 नहीं है, तो वर्तमान एक्सटेंशन अभी तक सूची में नहीं है और इसे जोड़ा जाना चाहिए।
इको लाइन मूल रूप से आउटपुट करती है, और मैं अपने प्लेसहोल्डर्स ( :
) को नई लाइनों के साथ बदलकर अच्छा दिखता हूं ।