আমি কিভাবে 2-স্তর ফোল্ডার থেকে ফাইলগুলি 1-স্তর ফোল্ডারে সরাতে পারি


3

আমার কাছে ফাইল ডিরেক্টরীতে সংরক্ষিত ফাইলগুলির একটি গুচ্ছ আছে

root_folder
  -- folder1
     --folder1_2
       --bunch of files here
  -- folder2
     --folder2_2
       --bunch of files here
  -- folder3
     --folder3_2
       --bunch of files here

আপনি দেখতে পারেন, রুট ফোল্ডার থেকে 2-স্তর ফোল্ডারে আমার ফাইলগুলি। ডিরেক্টরিটি আমার মতো সরলভাবে সরানো যায় যেমন ডিরেক্টরিটি এইরকম হয়ে যায়:

root_folder
  -- folder1
     --bunch of files here
  -- folder2
     --bunch of files here
  -- folder3
     --bunch of files here

আমি ব্যবহার করতে পারেন কোন freeware প্রোগ্রাম আছে? অথবা আমি এই কাজ সম্পন্ন কমান্ড প্রম্পট ব্যবহার করতে পারেন? সহযোগিতার জন্য অসংখ্য ধন্যবাদ :)


কি অপারেটিং সিস্টেম ?????
surfasb

উইন্ডোজ 7 32 বিট
Nicholas Lie

উত্তর:


3

আমি একটি ক্ষমতাশালী উদাহরণ প্রদান:

$source = "c:\sourceFolder"   
$dirs = dir $source | Where-Object {
$_.PSIsContainer }  

foreach ($folder in $dirs){  
    dir $folder -recurse | Where-Object { ! $_.PSIsContainer } | Move -Destination $folder -WhatIf  
     dir $folder -recurse | Where-Object { $_.PSIsContainer } | rd -recurse -Whatif  
}

আপনি কভার এবং Powershell ISE মধ্যে পেস্ট করতে পারেন। সাহসী কি যদি সুইচ মূলত একটি শুষ্ক রান আউটপুট।

আপনি নিশ্চিতভাবে আউটপুটটি চেক করতে পারেন যে এটি ফাইলগুলিকে যেখানেই আপনি চান সেখানে স্থানান্তরিত করছেন। অপসারণ -কি যদি স্ক্রিপ্ট লাইভ করতে সুইচ।


আমি আপনার কোড আটকানো এবং এটি নিম্নলিখিত ত্রুটি দেয়: ইউরি অপারেটর '!' পরে অনুপস্থিত অভিব্যক্তি। লাইন: 5 গৃহস্থালি: 39
Nicholas Lie

@ নিকোলাসলিঃ সম্পাদনা: আমি কোডটি ফরম্যাট করি নি কোড তাই অক্ষর কিছু unescaped ছিল। $ পরে একটি আন্ডারস্কোর হতে হবে।
surfasb

2

ক্ষমতাশালী সমাধান। এই ব্যবহার করুন root_folder (সরাসরি যে কোন আলগা ফাইল নেই তা নিশ্চিত করুন root_folder ):

gci -R | ?{!$_.PSIsContainer} | %{mv $_.fullname $_.directory.parent}

উপরোক্ত ফাইলে যে কোনও ফাইল রয়েছে যা একই ডিরেক্টরিতে খুঁজে পায় যা ফাইলটির মূল ডিরেক্টরিটি থাকে।

তারপর, এখন কোন খালি ফোল্ডার মুছে ফেলতে:

gci -R | ?{(gci $_) -eq $NULL} | rm


0

এখানে এই জন্য একটি উইন্ডোজ ব্যাচ স্ক্রিপ্ট।

এই প্রথম স্ক্রিপ্টটি কেবলমাত্র ওপি প্রশ্নে দেখানো তথ্যের অনুরূপ ডিরেক্টরি কাঠামোর মধ্যে ফাইলগুলি সরানো হবে।

ডিরেক্টরি গঠন জন্য "বেস ফোল্ডার" ধারণ করার জন্য স্ক্রিপ্ট পরিবর্তনশীল "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))

-1

এক্সপ্লোরার (এখানে উইন্ডোজ অনুমান করা) ফোল্ডার খুলুন 1_2, সব ফাইল নির্বাচন করুন, ডান ক্লিক করুন & amp; ফোল্ডারে যান নির্বাচন করুন ..., ফোল্ডার 1 নির্বাচন করুন সংলাপে; তারপরে আপনার ইচ্ছা থাকলে ফোল্ডার1_2 মুছুন।

আপনি সাফ করতে চান সব সাবফোল্ডারের জন্য উপরে পুনরাবৃত্তি করুন।

কোন বহিরাগত প্রোগ্রামের জন্য কোন প্রয়োজন নেই।


1
যদি ঠিক 10 বা ততোধিক ফোল্ডার থাকে তবে এটি ঠিক হবে। যদি আমার 100+ ফোল্ডার থাকে তবে এটি আমার জন্য কষ্টকর হবে (যা আমার ক্ষেত্রে 200+ ফোল্ডার) & gt;, & lt;
Nicholas Lie
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.