मुझे एक सिंगल पैरेंट फोल्डर से सभी सबफ़ोल्डर्स में जितनी आवश्यक हो उतने फ़ाइलों को स्थानांतरित करने के लिए एक बैच फ़ाइल स्क्रिप्ट की आवश्यकता है, जब तक कि प्रत्येक सबफ़ोल्डर बैच फ़ाइल में या कमांड लाइन पर निर्दिष्ट फ़ाइलों की अधिकतम मात्रा प्राप्त करता है। दूसरे शब्दों में, स्क्रिप्ट को माता-पिता फ़ोल्डर से सभी फ़ाइलों को इसके नीचे कई सबफ़ोल्डर्स में वितरित करना चाहिए (जो स्क्रिप्ट को स्वचालित रूप से बनाना होगा), फ़ाइलों को बहुत सारी एक्स फ़ाइलों में स्थानांतरित करना (जहां " एक्स " प्रत्येक सबफ़ोल्डर को प्राप्त फ़ाइलों की मात्रा होगी )।
अतिरिक्त आवश्यकताएं:
निम्न नाम के अनुसार सबफ़ोल्डर नाम बनाए जाने चाहिए: 001, 002, 003 और इसी तरह।
सभी प्रकार के फ़ाइलनामों के साथ फ़ाइलों का समर्थन करना चाहिए (रिक्त स्थान के साथ, विशेष वर्ण या गैर-अंग्रेजी उच्चारण के साथ, आदि)।
हजारों फ़ाइलों के दसियों के चलने का समर्थन करना चाहिए।
स्थानीय व्यवस्थापक अधिकारों के तहत विंडोज 10 प्रोफेशनल में काम करना चाहिए।
उदाहरण के लिए, मान लें कि फ़ोल्डर "D: \ Downloads" में 2400 फाइलें हैं, और यह कि आप उन्हें सबफ़ोल्डर्स में वितरित करना चाहते हैं, जिनमें प्रत्येक में 1000 फाइलें हैं। स्क्रिप्ट चलाने के बाद, निम्न संरचना बनाई जाएगी:
D:\Downloads
|__001
|__002
|__003
कहाँ पे:
D:\Downloads --> Will have no files inside it anymore
|__001 --> Will have 1000 files inside it
|__002 --> Will have 1000 files inside it
|__003 --> Will have the last 400 files inside it
फ़ाइलों का क्रम (कौन सी फ़ाइल किस सबफ़ोल्डर में जाती है) महत्वपूर्ण नहीं है, अर्थात, इस कदम को किसी विशिष्ट मानदंड को ध्यान में रखने की आवश्यकता नहीं होगी (जैसे फ़ाइल नाम, आकार, फ़ाइल नाम, आदि)। हालांकि, इस पहलू पर कोई भी सुधार स्वागत योग्य होगा (उदाहरण के लिए, अंतिम निर्मित फ़ाइलों को पहले सबफ़ोल्डर्स में स्थानांतरित करने का विकल्प)।
कोई विचार?
अपडेट करें
यहाँ समाधान है कि मेरे लिए काम किया है:
@echo off
setlocal enableextensions
setlocal enabledelayedexpansion
if not %3.==. goto syntax
if %2.==. goto syntax
:: Checks if %2 is a number:
SET "var="&for /f "delims=0123456789" %%i in ("%2") do set var=%%i
if defined var (goto syntax)
if /i %1.==. goto syntax
if /i not exist %1 echo. & echo The folder %1 does not exist... && echo Folder paths must be typed between "quotes" if there's any empty space. && echo. && goto end
setlocal enableextensions
setlocal enabledelayedexpansion
:: Maximum amount of files per subfolder:
SET limit=%2
:: Initial counter (everytime counter is 1, a new subfolder is created):
SET n=1
:: Subfolder counter:
SET nf=0
::Retrieves the amount of files in the specified folder:
set count=0
for %%A in (%1%\*.*) do set /a count+=1
echo.
echo Distributing %count% files in subfolders of up to %2 files...
FOR %%f IN (%1%\*.*) DO (
:: If counter is 1, create a new subfolder with name starting with "00...":
IF !n!==1 (
SET /A nf+=1
MD %1%\00!nf!
)
:: Move files into subfolders with names starting with "00...":
MOVE /-Y "%%f" %1%\00!nf! > NUL
:: Reset counter when a subfolder reaches the maximum file limit:
IF !n!==!limit! (
SET n=1
) ELSE (
SET /A n+=1
)
)
SET limit=
SET n=
SET nf=
SET count=
echo Move finished successfully.
goto end
:syntax
echo.
echo YOU TYPED: movedown %*
echo SYNTAX: movedown ["full path"] (between quotes if there's any space) [n] (maximum number of files per subfolder)
echo.
:end
ENDLOCAL
dir=001
) और दूसरा वह जो फाइलों को गिनता है, प्रत्येक move
कमांड के बाद इसे बढ़ाता है , जब यह 1000 के बराबर होता है, तो इसे 1 पर रीसेट करें, एक और चर बढ़ाता है (dir) ) जो निर्देशिका नाम रखता है और इसे तब तक करता है जब तक सभी फाइलें स्थानांतरित नहीं हो जातीं।