प्रत्येक फ़ाइल के लिए फ़ोल्डर बनाने और फ़ाइल को फ़ोल्डर में स्थानांतरित करने के लिए सीएमडी कमांड


10

मुझे एक कमांड की आवश्यकता है जो एक निर्देशिका में प्रत्येक फ़ाइल (फ़ाइल-नाम के आधार पर) के लिए एक फ़ोल्डर बनाने के लिए कमांड लाइन से चलाया जा सकता है और फिर फ़ाइल को नए बनाए गए फ़ोल्डरों में स्थानांतरित कर सकता है।

उदाहरण :

फ़ोल्डर प्रारंभ करना:

Dog.jpg
Cat.jpg

वर्तमान कमांड निर्देशिका में प्रत्येक फ़ाइलनाम के लिए एक फ़ोल्डर बनाने में निम्न आदेश बहुत अच्छा काम करता है।

for %i in (*) do md "%~ni"

परिणाम फ़ोल्डर:

\Dog\
\Cat\
Dog.jpg
Cat.jpg

मुझे इसे एक कदम आगे ले जाने और फ़ाइल को फ़ोल्डर में ले जाने की आवश्यकता है।

मैं क्या हासिल करना चाहता हूं:

\Dog\Dog.jpg
\Cat\Cat.jpg

क्या कोई मुझे यह सब करने के लिए एक आदेश के साथ मदद कर सकता है?

जवाबों:


10

दूसरी कमान होगी

for %i in (*) do move "%i" "%~ni"

EDIT: "i"% i के लिए, and31415 की टिप्पणी पर आधारित है। tnx।


4
इसके बाद से मैं कहूँगा कि A) उन्हें जोड़ सकता है- for %i in (*) do cmda && cmdb B) पहले for %i in (*) do @ECHO cmda && cmdb C को प्रतिध्वनित कर सकता था) जोड़ सकता था मुझे लगता है कि यह सबडाइरों के माध्यम से जाने के लिए एक / R है।
बार्लोप

2
यह कमांड तब काम नहीं करेगा जब फ़ाइल नामों में रिक्त स्थान हों। आपको इस तरह से कुछ का उपयोग करना चाहिए: for %i in (*) do move "%~i" "%~ni"यहां तक ​​कि यह काफी अच्छा नहीं हो सकता है, क्योंकि इसका दुष्प्रभाव तब हो सकता है जब लक्ष्य फ़ोल्डर मौजूद नहीं होता है (उदाहरण के लिए फाइलें खुद को "स्थानांतरित" किया जाता है, इसलिए इसका नाम बदला गया है)। एक आसान समाधान यह होगा कि दोनों कमांड को मिलाएं, इस प्रकार: for %i in (*) do md "%~ni" && move "%~i" "%~ni"कमांड मानती है कि निर्देशिका पहले से मौजूद नहीं है।
१३१५१५

2
इसके अलावा, बार्लॉप की टिप्पणी का विस्तार करने के लिए, जब आप उपयोग करते हैं cmda && cmdbतब cmdbकेवल तभी निष्पादित किया जाएगा जब cmdaसफल था। यदि आप cmda & cmdbइसके बजाय उपयोग करना चाहते थे , तो दूसरी कमांड को निष्पादित किया जाएगा। वास्तव में, एक एकल एम्परसेंड ( &) सिर्फ एक कमांड सेपरेटर है और डबल एम्पर्सैंड ( &&) एक सशर्त एक है। ऐसे कमांड जो errorlevelमूल्य निर्धारित नहीं करते हैं , उन्हें बाद वाले के साथ प्रयोग नहीं किया जाना चाहिए।
१३१५१५

5

बस श्रृंखला में इन आदेशों को निष्पादित करें:

प्रत्येक फ़ाइल के लिए फ़ोल्डर बनाने के लिए:

for %i in (*) do mkdir "%~ni"

प्रत्येक फ़ाइल को उसके फ़ोल्डर में ले जाने के लिए:

for %i in (*) do move "%i" "%~ni"

1
सुपर उपयोगकर्ता में आपका स्वागत है! यह एक और उत्तर को दोहराता है और कोई नई सामग्री नहीं जोड़ता है। कृपया जवाब न दें जब तक कि आपके पास योगदान देने के लिए वास्तव में कुछ नया न हो।
DavidPostill

-1

यदि आपके पास कुछ फ़ोल्डर्स हैं जैसे कि यह करना होगा: उदाहरण साल \ Filename.mp4

1901\Filename.mp4 
1902\Filename.mp4
1903\Filename.mp4

यह सभी फ़ोल्डर को 1 स्तर की फ़ाइलों की सूची देगा; सभी * .mp4 और * .mkv सूचियों को फ़ाइल नाम के साथ 2 स्तर फ़ोल्डर बनाएंगे और 1 स्तर फ़ोल्डर में सभी समान नाम फ़ाइलों को 2 स्तर फ़ोल्डर में स्थानांतरित करेंगे, इसे वर्षों के बेस फ़ोल्डर में चलाएं।

for /d %D in (*) do for %i in (%~fD\*.mp4,%~fD\*.mkv) do mkdir "%~dpi%~ni" && move "%~dpi%~ni.*" "%~dpi%~ni\"

यदि आपके पास 1 स्तर का YEARS फ़ोल्डर नहीं है, तो आप पहले के लिए पहले बाईपास कर सकते हैं और दूसरा चरण चला सकते हैं, इसे फ़ाइल नाम बेस फ़ोल्डर में चला सकते हैं।

for %i in (*.mp4,*.mkv) do mkdir "%~dpi%~ni" && move "%~dpi%~ni.*" "%~dpi%~ni\"

&& यह सुनिश्चित करेगा कि फ़ाइलों की चाल को चलाने के लिए पिछले mkdir% ERRORLEVEL% 0 है

परीक्षण करने के लिए, इसका उपयोग करें:

for /d %D in (*) do for %i in (%~fD\*.mp4,%~fD\*.mkv) do echo "%~dpi%~ni" && echo "%~dpi%~ni.*" "%~dpi%~ni\"

बायां फ़ाइलें खोजें: / d% D के लिए (*)% i के लिए% (% ~ fD \ *) echo करें "% ~ dpi% ~ Fi"
Olívio Moura

/ d% D in (*) के लिए% i in (% ~ fD \ *) करें "% ~ Fi" "D: \ TRASH \"
Olívio Moura
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.