এখানে এই জন্য একটি উইন্ডোজ ব্যাচ স্ক্রিপ্ট।
এই প্রথম স্ক্রিপ্টটি কেবলমাত্র ওপি প্রশ্নে দেখানো তথ্যের অনুরূপ ডিরেক্টরি কাঠামোর মধ্যে ফাইলগুলি সরানো হবে।
ডিরেক্টরি গঠন জন্য "বেস ফোল্ডার" ধারণ করার জন্য স্ক্রিপ্ট পরিবর্তনশীল "topfolder" এর মানটি সম্পাদনা করুন।
"Topfolder" এর মধ্যে অনুসন্ধান করা "প্রথম স্তর" ফোল্ডারগুলির জন্য সাধারণ উপসর্গ ধারণকারী স্ক্রিপ্ট পরিবর্তনশীল "subfolderprefix" এর মানটি সম্পাদনা করুন। OP প্রশ্নে, এই "উপসর্গ" "ফোল্ডার" ছিল তবে এটি প্রয়োজনীয় হিসাবে কোন স্ট্রিংতে পরিবর্তন করা যেতে পারে। উদাহরণস্বরূপ "ফোল্ডার" ব্যবহার করে উদাহরণস্বরূপ, স্ক্রিপ্ট এইরকম ফোল্ডার অনুসন্ধান করবে:
top_folder
folder1
folder2
folder3
folder99
folderABC
কিন্তু, "top_folder" এর অন্যান্য ফোল্ডারগুলি বাদ দেওয়া হবে, যেমন:
top_folder
somefolder
someotherfolder
"দ্বিতীয় স্তরের" সাবফোল্ডার যা ফাইলগুলির জন্য অনুসন্ধান করা হবে, তারপরে পটভূমির পদাঙ্কের একটি সাধারণ উপসর্গ "_" (" folder1\folder1_xxx
)। আবার, অন্য কোন ফোল্ডার বাদ দেওয়া হবে:
top_folder
folder1
folder1_2
(Files here will be moved to "folder1")
folder1_99
(Files here will be moved to "folder1")
folder1_ABC
(Files here will be moved to "folder1")
folder2
folder2_2
(Files here will be moved to "folder2")
somesubfolder
(Files here will be skipped)
folder3
folder3_1
(Files here will be moved to "folder3")
folder3_2
(Files here will be moved to "folder3")
folder99
folder99_XYZ
(Files here will be moved to "folder99")
folderABC
folderABC_123
(Files here will be moved to "folderABC")
somefolder
(Folders here will be skipped)
someotherfolder
(Folders here will be skipped)
এখানে ব্যাচ স্ক্রিপ্ট রয়েছে:
@echo off
set "topfolder=C:\Temp\SU373589\top_folder"
set "subfolderprefix=folder"
set "startdir=%CD%"
cd /d "%topfolder%"
set ctoptest=0
set cfilecount=0
for /d %%f in ("%subfolderprefix%*") do call :worklevel1 "%%~f"
if %ctoptest% EQU 0 echo There are no matching subfolders in "%topfolder%".
if %cfilecount% EQU 0 echo There were no files moved.
if %cfilecount% EQU 1 echo %cfilecount% file was moved.
if %cfilecount% GEQ 2 echo %cfilecount% files were moved.
cd /d "%startdir%"
goto :EOF
:worklevel1
set "subfolder=%~1"
set /a ctoptest+=1
echo Processing subfolder "%subfolder%" ...
set "subsubfolderprefix=%subfolder%\%subfolder%_"
set cwork1test=0
for /d %%g in ("%subsubfolderprefix%*") do call :worklevel2 "%%~g"
if %cwork1test% EQU 0 echo There are no matching subfolders in "%subfolder%"
echo.
set "subfolder="
set "subsubfolderprefix="
set cwork1test=
goto :EOF
:worklevel2
set "subsubfolder=%~1"
set /a cwork1test+=1
echo Processing subsubfolder "%subsubfolder%" ...
set cwork2test=0
for %%h in ("%subsubfolder%\*") do call :workmove "%%~h"
if %cwork2test% EQU 0 echo There are no files to move in "%subsubfolder%"
set "subsubfolder="
set cwork2test=
goto :EOF
:workmove
set "targetfile=%~1"
set /a cwork2test+=1
set /a cfilecount+=1
echo Moving file "%targetfile%" to "%subfolder%" (%cwork2test%)...
move "%targetfile%" "%subfolder%" >nul 2>&1
set "targetfile="
goto :EOF
এই দ্বিতীয় ব্যাচ স্ক্রিপ্টটি একই "প্রথম স্তর" সাবফোল্ডারের দিকে একইভাবে কাজ করবে এবং সমস্ত "দ্বিতীয় স্তরের" সাবফোল্ডার থেকে সমস্ত ফাইলগুলি "প্রথম স্তর" সাবফোল্ডারের দিকে নিয়ে যাবে। এটি কোনও ফোল্ডারে যেকোন "উপসর্গ" সাথে মেলে না।
ডিরেক্টরি গঠন জন্য বেস ফোল্ডার ধারণকারী স্ক্রিপ্ট পরিবর্তনশীল "topfolder" মান সম্পাদনা করুন।
@echo off
set "topfolder=C:\Temp\SE373589\top_folder"
set "startdir=%CD%"
cd /d "%topfolder%"
set ctoptest=0
set cfilecount=0
for /d %%f in ("*") do call :worklevel1 "%%~f"
if %ctoptest% EQU 0 echo There are no matching subfolders in "%topfolder%".
if %cfilecount% EQU 0 echo There were no files moved.
if %cfilecount% EQU 1 echo %cfilecount% file was moved.
if %cfilecount% GEQ 2 echo %cfilecount% files were moved.
cd /d "%startdir%"
goto :EOF
:worklevel1
set "subfolder=%~1"
set /a ctoptest+=1
echo Processing subfolder "%subfolder%" ...
set cwork1test=0
for /d %%g in ("%subfolder%\*") do call :worklevel2 "%%~g"
if %cwork1test% EQU 0 echo There are no matching subfolders in "%subfolder%"
echo.
set "subfolder="
set cwork1test=
goto :EOF
:worklevel2
set "subsubfolder=%~1"
set /a cwork1test+=1
echo Processing subsubfolder "%subsubfolder%" ...
set cwork2test=0
for %%h in ("%subsubfolder%\*") do call :workmove "%%~h"
if %cwork2test% EQU 0 echo There are no files to move in "%subsubfolder%"
set "subsubfolder="
set cwork2test=
goto :EOF
:workmove
set "targetfile=%~1"
set /a cwork2test+=1
set /a cfilecount+=1
echo Moving file "%targetfile%" to "%subfolder%" (%cwork2test%)...
move "%targetfile%" "%subfolder%" >nul 2>&1
set "targetfile="
goto :EOF
ফাঁকা ফোল্ডার ইত্যাদির জন্য সমস্ত চেক ছাড়া ব্যাচ স্ক্রিপ্টের একটি সহজ সংস্করণ ... ইত্যাদি:
@echo off
set "topfolder=C:\Temp\SE373589\top_folder"
set "startdir=%CD%"
cd /d "%topfolder%"
for /d %%f in (*) do (
echo Processing folder: "%%~f"
for /d %%g in ("%%f\*") do (
echo Processing sub-folder: "%%~g"
for %%h in ("%%~g\*") do (
echo Moving file: "%%~h" to "%%~f"
move "%%~h" "%%~f" >nul 2>&1
)
)
echo.
)
cd /d "%startdir%"
এবং পরিশেষে, একটি "ন্যূনতম ন্যূনতম" স্ক্রিপ্ট মেসেজিং ছাড়াই এবং আপনি অনুমান করছেন যে আপনি ইতিমধ্যেই সঠিক "বেস ফোল্ডারে" আছেন:
@echo off
for /d %%f in (*) do (
for /d %%g in ("%%f\*") do (
for %%h in ("%%~g\*") do move "%%~h" "%%~f" >nul 2>&1
)
)
এবং, যদি আপনি এটির প্রত্যাশা করেন তবে একটি "এক লাইনার" আপনি কমান্ড প্রম্পট থেকে চালাতে পারেন:
@for /d %f in (*) do @(for /d %g in ("%f\*") do @(for %h in ("%~g\*") do @move "%~h" "%~f" >nul 2>&1))