कमांड प्रॉम्प्ट में पुन: नंगे फ़ाइल नाम प्राप्त करें


19

मैं केवल फ़ाइल नाम (कोई एक्सटेंशन या फ़ाइल पथ) पुनरावर्ती प्राप्त करने की कोशिश कर रहा एक छोटे से रोड़ा में भाग गया। यह रूट फ़ोल्डर में मेरे लिए काम किया:

dir /b

लेकिन जब मैंने पुनरावर्ती रूप से स्कैन करने के लिए मुझे जोड़ा / जोड़ा तो मुझे फ़ाइलनामों से पहले फ़ाइल पथ भी मिला, जो मुझे नहीं चाहिए। एक निर्देशिका में सभी सबफ़ोल्डर्स से नंगे फ़ाइलनाम प्राप्त करने का एक तरीका है?

विंडोज 7 x64 पर Im मैं नियमित रूप से कमांड प्रॉम्प्ट का उपयोग नहीं PS या VBS नहीं करना चाहिए

जवाबों:


15

निम्न आदेश का उपयोग करें:

dir /b /a /s
  • / b आउटपुट से दिनांक और अन्य विवरण निकालता है
  • / केवल फ़ाइल नाम, कोई पथ आउटपुट नहीं करता है
  • / s एक पुनरावर्ती निर्देशिका सूची को सक्षम करता है

यदि आपको आउटपुट को किसी फ़ाइल में सहेजना है, तो आप इसका उपयोग कर सकते हैं:

dir /b /a /s >> list_of_names.txt

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

for /f %a in ('dir /b /s') do @echo %~na

क्या आप इसे समझा सकते हैं? मेरे लिए यह थोड़ा समझ में आता है।
साइमन शीहान

4
यह काम नहीं करता है, / इस तरह काम नहीं करता है - यह एक फिल्टर है जिसके लिए आप किस प्रकार की फ़ाइलों को सूचीबद्ध करना चाहते हैं। यह एक पुनरावर्ती निर्देशिका लिस्टिंग करते समय फ़ाइल नाम से पथ पट्टी नहीं करता है।
Gaff

उत्तर संपादित किया; और बस मेरे हाथों को फिर से एक विंडोज़ बॉक्स पर मिला, मुझे लगता है कि इस समय को ऐसा करना चाहिए (win732bit)
निक सो

6

इसे इस्तेमाल करे:

for /f "delims=" %a in ('dir /b /s') do @echo %~na

कैसे काम करता है और यह क्या कर रहा है, इस बारे में अधिक जानकारी टाइप करें for /?


यह लगभग काम करता है, लेकिन एक बड़ी समस्या है। यह केवल एक फ़ाइलनाम के पहले शब्द को आउटपुट करता है। अगर एक फ़ाइल नाम उदाहरण के लिए है "मेरी छुट्टी छवि 1" तो यह केवल "मेरे" का उत्पादन करता है
TMRW

इसके लिए प्रयास करें: / f "delims = |" % a ('dir / b') do @echo% ~ na। डिफ़ॉल्ट रूप से / f के पैरामीटर के लिए रिक्त स्थान पर टोकन होगा। एक चरित्र को टोकन सेट करना जो फ़ाइल / निर्देशिका नामों में प्रकट नहीं होना चाहिए, आपको रिक्त स्थान सहित संपूर्ण नाम देगा।
स्कॉट मैकिननी

यदि आप किसी फ़ाइल में भेजा गया आउटपुट चाहते हैं, तो अपेंड>> filename.txt
ग्रबेर

2
for /r %i in (*) do @echo %~ni

या

forfiles /s /c "cmd /c if @isdir==FALSE noquotes.bat @fname"

इस सामग्री के साथ noquotes.batअपने % PATH% में एक फ़ाइल ग्रहण करना

@echo %~1

के लिए / आर दृष्टिकोण समझाया

for /rवर्तमान निर्देशिका को पुनरावर्ती चलता है (आप एक निर्देशिका निर्दिष्ट कर सकते हैं for /r drive:\path\, वर्तमान निर्देशिका मान ली गई है) और सेट में मिलान की गई प्रत्येक फ़ाइल के लिए निर्दिष्ट कमांड निष्पादित करता है (*)। सेट (.)केवल निर्देशिकाओं से मेल खाएगा। @echo% ~ ni यह कमांड प्रॉम्प्ट से काम करता है। यदि आप इसे किसी बैच फ़ाइल के अंदर रखते हैं, तो अपने उद्धरणों को दोगुना करें। अर्थातfor /r %%i in (*) do @echo %%~ni

forfiles दृष्टिकोण समझाया

/sवर्तमान और सभी उपनिर्देशिकाओं
/cको उद्धरण के अंदर कमांड को कार्यान्वित करता है
@isdirऔर @fnameकमांड स्ट्रिंग में उत्सर्जित एक प्रतीक है
। अतिरिक्त बैच फ़ाइल noquotes.bat%-1 (पैरामीटर 1) के साथ दोहरे-उद्धरणों को अलग करने में मदद करती है,
forfilesजिससे आप शुरू करने के लिए एक पथ निर्दिष्ट कर सकते हैं।forfiles /P C:\Windows ...


@DavidPostill हाँ, यह एक खराब जवाब था। आपकी टिप्पणियों के लिए आभार। कृपया मुझे बताएं कि क्या मैं अपने उत्तर को और बेहतर कर सकता हूं।
JJS

@DavidPostill आपके पास कोई पिछला उत्तर या टिप्पणी नहीं है। क्या आप प्रश्नों को मॉडरेट कर रहे थे, या उत्तर की तलाश कर रहे थे और मेरे खराब गुणवत्ता वाले उत्तर पर ठोकर खा रहे थे?
JJS

आपका जवाब "लो क्वालिटी पोस्ट" समीक्षा कतार में पॉप अप हुआ। जैसा कि मैं बैच फ़ाइलों के बारे में बहुत कुछ जानता हूं मैंने इसे बंद कर लिया।
DavidPostill

@DavidPostill आपकी समीक्षा के लिए धन्यवाद। मैं अपने उत्तर में किए गए परिवर्तनों की आपकी समीक्षा का स्वागत करता हूं।
JJS

बहुत बेहतर ... :)
DavidPostill

-1

सभी फ़ाइलों की सूची, नंगे, पुनरावर्ती, विशेषताओं का उपयोग करते हुए (निर्देशिका नहीं) (केवल फाइलें)

dir / B / S / A: -D

C: \ test \ cache> dir / B / S / A: -D

C: \ test \ cache \ 7 \ 0f \ 7b50ed0522645513da90345120eaf0f7 C: \ test \ cache \ d \ 23 \ 814644aa6a8195c91d54d2f7bb64e23d


प्रश्न कहता है कि ओपी "केवल फ़ाइल नाम (कोई एक्सटेंशन या फ़ाइल पथ) प्राप्त करने की कोशिश कर रहा है। ... लेकिन जब मैंने dir /b /sपुनरावृत्ति को स्कैन करने के लिए [कोशिश की ], मुझे फ़ाइल नाम से पहले फ़ाइल पथ भी मिले, जो मुझे नहीं चाहिए। "तो, आप ओपी को बता रहे हैं कि वे पहले से ही क्या कोशिश कर चुके हैं, और आपके उत्तर का प्रदर्शन करते हैं। यह वही परिणाम उत्पन्न करता है जब ओपी ने कोशिश की थी (यानी, वह नहीं जो वे चाहते हैं)।
स्कॉट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.