কোনও ডিরেক্টরিতে এক্সটেনশন ধরণের সম্পূর্ণ তালিকা কীভাবে সরিয়ে নেওয়া যায়?


28

একটি ডিরেক্টরিতে এবং পুনরাবৃত্তির সাথে এটির উপ ডিরেক্টরিগুলির মধ্যে অর্থ, ডিরেক্টরিতে প্রতিটি ডিরেক্টরি প্রক্রিয়াজাত হয়, কিভাবে আমি ডিরেক্টরিতে অনন্য এক্সটেনশনের একটি সম্পূর্ণ তালিকা সংকলন করব?

ওএস হ'ল উইন্ডোজ এক্সপি বর্তমান সমস্ত আপডেট সহ, তবে আমি স্ক্রিপ্টটি চালাচ্ছি যদি আমি এটি কী করছে তা বলতে সক্ষম হয়েছি, যদিও আমি ডট-নেট ইনস্টল না করা পছন্দ করি, কারণ আমি সত্যিই এটি পছন্দ করি না।

উত্তর:


29

এই ব্যাচের স্ক্রিপ্ট এটি করবে।

@echo off

set target=%~1
if "%target%"=="" set target=%cd%

setlocal EnableDelayedExpansion

set LF=^


rem Previous two lines deliberately left blank for LF to work.

for /f "tokens=*" %%i in ('dir /b /s /a:-d "%target%"') do (
    set ext=%%~xi
    if "!ext!"=="" set ext=FileWithNoExtension
    echo !extlist! | find "!ext!:" > nul
    if not !ERRORLEVEL! == 0 set extlist=!extlist!!ext!:
)

echo %extlist::=!LF!%

endlocal

এটিকে যে কোনও .batফাইল হিসাবে সংরক্ষণ করুন, এবং batchfileবর্তমান ডিরেক্টরি তালিকাভুক্ত করতে কমান্ডটি (আপনার নাম হিসাবে চিহ্নিত করুন) এর সাথে চালনা করুন বা এর সাথে কোনও পথ নির্দিষ্ট করুন batchfile "path"। এটি সমস্ত উপ-ডিরেক্টরি অনুসন্ধান করবে।

আপনি যদি কোনও ফাইলে রফতানি করতে চান তবে batchfile >filename.txt(বা batchfile "path" >filename.txt) ব্যবহার করুন ।

ব্যাখ্যা

for /f...লাইনের আগে সবকিছু ঠিকঠাক করে দেয়: এটি অনুসন্ধানের জন্য লক্ষ্য ডিরেক্টরিটি পায়, বিলম্বিত প্রসারণ সক্ষম করে যা আমাকে লুপে পরিবর্তনশীল করতে দেয় এবং একটি নতুন লাইন ( LF) সংজ্ঞায়িত করে যা আমি নীটার আউটপুট ব্যবহার করতে পারি। ওহ, এবং এর %~1অর্থ "প্রথম যুক্তি পান, উদ্ধৃতিগুলি সরিয়ে ফেলুন" যা দ্বিগুণ-উক্তিগুলি প্রতিরোধ করে - দেখুন for /?

লুপটি সেই dir /b /s /a:-d "%target%"কমান্ডটি ব্যবহার করে , টার্গেটের অধীনে সমস্ত সাব ডিরেক্টরিতে সমস্ত ফাইলের একটি তালিকা দখল করে।

%%~xidirকমান্ডটি ফিরে আসে এমন পুরো পথ থেকে এক্সটেনশনটি বের করে ।

একটি ফাঁকা এক্সটেনশন "ফাইলউইথনো এক্সটেনশন" দিয়ে প্রতিস্থাপন করা হয়েছে, যাতে আপনি জানেন যে এই জাতীয় একটি ফাইল রয়েছে - আমি যদি এর পরিবর্তে একটি খালি লাইন যুক্ত করি তবে এটি একেবারে সুস্পষ্ট নয়।

findস্বতন্ত্রতা নিশ্চিত করার জন্য যদি কোনও আদেশের মাধ্যমে পাঠানো হয় তবে পুরো বর্তমান তালিকা । Find কমান্ডের টেক্সট আউটপুট পাঠানো হয় nulমূলত একটি কালো গহ্বর - আমরা এটা চাই না। যেহেতু আমরা সর্বদা :তালিকার শেষে একটি সংযোজন করি, তাই আমাদেরও নিশ্চিত হওয়া উচিত যে অনুসন্ধান কোয়েরিটি শেষ হয়েছে :যাতে এটি আংশিক ফলাফলের সাথে মেলে না - মন্তব্য দেখুন।

% ERRORLEVEL% findকমান্ড দ্বারা সেট করা হয়েছে , 0 এর মান একটি মিল আছে তা নির্দেশ করে। সুতরাং এটি যদি 0 না হয় তবে বর্তমান এক্সটেনশনটি এখনও পর্যন্ত তালিকায় নেই এবং যুক্ত হওয়া উচিত।

প্রতিধ্বনির লাইনটি মূলত আউটপুটগুলিতে থাকে এবং আমি আমার স্থানধারককে ( :)) এটিকে সুন্দর দেখাতে নতুন লাইনের সাথে প্রতিস্থাপন করি ।


+1 @ Bob: বিস্ময়কর উত্তর, ব্যাখ্যা যোগ করাও একটি বিশাল সহায়ক ছিল। সবে স্ক্রিপ্টটি পরীক্ষা করা হয়েছে, পরীক্ষার ফলাফল পর্যালোচনা করেছে এবং সবকিছু দুর্দান্ত কাজ করেছে। আবারও, ধন্যবাদ!
ভুলগুলি

1
এটি নিখুঁতভাবে কাজ করেছে! আমি নিম্নলিখিত বাক্য batchfile "path" >filename.txt
গঠনটি

দুর্দান্ত স্ক্রিপ্ট! তবে এটির সাথে একটি ছোট ত্রুটি রয়েছে: যদি ফোল্ডারে ফাইল থাকে aaa.cssএবং zzz.cs, এক্সটেনশানটি .csস্ক্রিপ্ট দ্বারা জানানো হবে না।
গুজাক

1
@ গুজাক হুফস এখনই স্থির। পাঠ্য সন্ধানের বিস্ময় ... :সীমানা মেলে বাধ্য করার জন্য অনুসন্ধান কোয়েরিটি শেষ হয়েছে তা নিশ্চিত করতে হয়েছিল ।
বব

19

যদিও ব্যাচের স্ক্রিপ্টের জন্য প্রয়োজনীয়তাটি কঠোরভাবে পূরণ না করে, আমি একটি একক-লাইন পাওয়ারশেল স্ক্রিপ্ট ব্যবহার করেছি:

Get-Childitem C:\MyDirectory -Recurse | WHERE { -NOT $_.PSIsContainer } | Group Extension -NoElement | Sort Count -Desc > FileExtensions.txt

আপনি সম্ভবত কমান্ড লাইন / ব্যাচ ফাইল থেকে এটি চালাতে পারেন:

Powershell -Command "& Get-Childitem C:\MyDirectory -Recurse | WHERE { -NOT $_.PSIsContainer } | Group Extension -NoElement | Sort Count -Desc > FileExtensions.txt"

আমি এটির জন্য কোনও ক্রেডিট দাবি করি না, এবং অবশ্যই আপনার পাওয়ারশেল ইনস্টল করা দরকার। উইন্ডোজের নতুন সংস্করণগুলির জন্য, এটির কাছাকাছি আসেনি।

আপনি সরিয়ে C:\MyDirectoryফেললে এটি বর্তমান ডিরেক্টরিতে কার্যকর হবে।

শেষে এটি একটি ফাইলএক্সটেনশন.টেক্সট উত্পাদন করবে যা নীচের মতো কিছু রয়েছে:

+-------+------+
| Count | Name |
+-------+------+
| ----- | ---- |
| 8216  | .xml |
| 4854  | .png |
| 4378  | .dll |
| 3565  | .htm |
| ...   | ...  |
+-------+------+

আপনার ফোল্ডারের কাঠামোর উপর নির্ভর করে আপনি মাঝে মাঝে আপনাকে দীর্ঘ পথের কথা জানিয়ে ত্রুটি পেতে পারেন।

Get-ChildItem : The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters.

সেখানে যে কোনও উপ-ডিরেক্টরিগুলিও বিশ্লেষণ করা হবে না তবে সমস্ত কিছুর ফলাফল এখনও প্রদর্শিত হবে।


ধন্যবাদ, এটি একটি দরকারী উত্তর সম্মত হন। কোনও সম্পর্কযুক্ত নোটে, আপনি কীভাবে কেবলমাত্র একক উত্তর পোস্ট করেছেন তা নিয়ে বিট বিস্মিত হয়ে গেছে, তবুও পরপর 100 দিন সুপারউজারে দেখার জন্য "ফ্যান্যাটিক" ব্যাজ রয়েছে। আপনার কাছে সাইট বুকমার্ক আছে বা কিছু আছে?
ভুলগুলি

ব্যাজ 2010 সালে লাভ করেন যখন আমি কার্যকরভাবে lurked, কিন্তু আমি আছি পর্যন্ত তাই আরো সক্রিয়: stackoverflow.com/users/31532/dan-atkinson । :)
ড্যান অ্যাটকিনসন

4

পাওয়ারশেল ব্যবহার করে এখানে একটি বিশদ উত্তর দেওয়া হয়েছে (উইন্ডোজ এক্সপি সহ আপনাকে পাওয়ারশেল ইনস্টল করতে হবে):

আরে, স্ক্রিপ্টিং গাই! ফাইলগুলির সংগ্রহে ব্যবহৃত অনন্য ফাইল এক্সটেনশানগুলি বাছতে আমি কীভাবে উইন্ডোজ পাওয়ারশেল ব্যবহার করতে পারি?


1
পাওয়ারশেল কমান্ড লাইনের চেয়ে অবশ্যই সহজতর, এটি নেট। এর উপর ভিত্তি করে। যা দুর্ভাগ্যক্রমে, "আমি ডট-নেট ইনস্টল না করা পছন্দ করব" এর বিপরীতে।
বব

1
+1 @ রিচার্ডএম: ববের সাথে সম্মত হন। এছাড়াও, এক্সটেনশনের উদাহরণগুলির গণনা সম্পর্কিত কোডটি পাওয়া গেছে - পাওয়ারশেল সম্পর্কে কিছুই জানে না - খুব স্মৃতি ভারী দেখা যায়; অর্থ কেবল প্রতিটি উদাহরণের একটি গণনা রাখার পরিবর্তে, আমি বিশ্বাস করি যে প্রতিটি এক্সটেনশনের জন্য কোনও এক্সটেনশনের সদৃশ ঘটনা সংরক্ষণ করার জন্য একটি অ্যারে তৈরি করা হবে, তারপরে শেষে প্রতিটি এক্সটেনশান অ্যারের জন্য একটি গণনা করা, যা আমার কাছে মনে হয় এটি একটি অত্যন্ত বিজোড় উপায়ে বর্ধিতকরণের উদাহরণ গণনা করা হচ্ছে। আমি কিছু অনুপস্থিত করছি? (এটি বলেছিল, প্রথম পাওয়ারশেল ওয়ান-লাইনার খুব ভাল, এবং আমি যদি ডটনেটকে অপছন্দ না করি তবে আমি চেষ্টা করতাম))
ভুলগুলি

1
এটা সঙ্গত. এই প্রশ্নটি এমন অনুসন্ধানকারীদের আকর্ষণ করতে পারে যারা পাওয়ারশেল সমাধানের জন্য আরও উন্মুক্ত। মনে মনে, একটি শালীন গুগল অনুসন্ধান উপরের লিঙ্কটিও খুঁজে পাবে।
রিচার্ডএম

3
এই লিঙ্কের জন্য +1। ভুলগুলি স্পষ্টতই সবকিছু অপছন্দ করে। নেট, তবে এর অর্থ এই নয় যে উপরের সমাধানটি এই সমস্যার দীর্ঘমেয়াদী সমাধান। আমি যত বেশি ভাষাগুলি তত ভাল বলে মনে করি।
স্টিভ রথবোন

1
এখানে আরেকটি লিঙ্ক যা পাওয়ারশেল ব্যবহার করে পুনরাবৃত্ত অনুসন্ধানগুলিকে সম্বোধন করে। robertbigec.wordpress.com/2011/01/07/...
goodeye

0

আপনার ব্যবহারের পথে সিএমডি থেকে সমস্ত অনন্য এক্সটেনশান তালিকা করতে:

Powershell -Command "Get-ChildItem . -Include *.* -Recurse | Select-Object Extension | Sort-Object -Property Extension -Unique"

0

আমি এটি পরিবর্তন দরকারী

if "!ext!"=="" set ext=FileWithNoExtension

থেকে

if "!ext!"=="" set ext=.FileWithNoExtension

এবং পরিবর্তন করতে

echo %extlist::=!LF!%

থেকে

echo %extlist::=!LF!% > ext-list.txt

উত্পন্ন ফাইলটিতে (কোনও লাইনফিড নেই, তবে কোনও ব্যাপার নেই) .dwg.exr.FileWithNoExtension.vrlmap.sat.bak.ctb

যা আমি তখন আমার প্রকল্পের জন্য ব্যবহার করতে সক্ষম হয়েছি।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.