বিকল্প # 1: ফর / আর আমার জন্য # 2 এর চেয়ে বেশি স্বজ্ঞাত।
বিকল্প # 2: ফর / এফ ব্রায়ান অ্যাডকিন্সের পরামর্শে "জায়গাগুলিতে নাম" দিয়ে সমস্যার সমাধান করে।
বিকল্প # 3: পথগুলি ডাবল উক্তি ব্যতীত আমার বেছে নেওয়া হবে।
ব্রায়ান বা অন্যান্য গুরুগুলির মধ্যে আরও মার্জিত সমাধান হতে পারে বা আরও কয়েক ডজন সমাধান সমাধান করতে সক্ষম হতে পারে তবে এই তিনটি কাজ। আমি টোকেনগুলির জন্য ব্যবহার করার চেষ্টা করেছি তবে তারপরে শিরোনাম এবং পাদচরণগুলি সরিয়ে ফেলতে হয়েছিল তাই আমি আবার # 1 এ ফিরে এসেছি। আমি একটি ছোট .bat ফাইল তৈরি করা এবং এটিকে কল করার বিষয়টিও বিবেচনা করেছি তবে এতে অন্য একটি ফাইল যুক্ত হয়েছে (যদিও এটি কোনও ফাংশন হিসাবে আরও বেশি নমনীয়তা দেয়)।
আমি এম্বেডেড স্পেস সহ ডিরেক্টরি এবং ফাইলের নামগুলি, 200+ অক্ষরের ফাইল নাম, কোনও এক্সটেনশনবিহীন একটি ফাইল নাম এবং একটি ছোট ড্রাইভের মূলের (কেবল সময়ের জন্য; কিছুটা ধীর - ঠিক যেমন ব্রায়ানের পরামর্শ অনুসারে) পরীক্ষা করেছি - তবে তারপরে উইন্ডোজ এক্সপ্লোরারে অনুসন্ধান করছে; সে কারণেই আমি সবকিছু অনুসন্ধান অ্যাপ্লিকেশন ইনস্টল করেছি)।
বিকল্প # 1: ফর / আর
সেরা (?) ব্রায়ানের সমাধান আমার পক্ষে কেন কাজ করে না তা বের করার চেষ্টা করার সময় আমি হেল্প ফরের দিকে তাকিয়ে / আর পদ্ধতির চেষ্টা করার সিদ্ধান্ত নিয়েছি। (ফাইল তৈরি করা বিকল্প # 2 এর মতোই হবে))
@echo off & for /R "c:\deletelater\folder with spaces" %A in (*.*) do echo %~fA %~zA
উদাহরণ - কাজ (পুনরাবৃত্তি প্রদর্শনের জন্য উপরের চেয়ে আলাদা ডিরেক্টরি)
@echo off & for /R "c:\deletelater" %A in (*.*) do echo %~fA %~zA
c:\DeleteLater\Name with Spaces.txt 19800676
c:\DeleteLater\NoSpacesLongName.txt 21745440
c:\DeleteLater\Folder with Spaces\2nd Name with Spaces.txt 5805492
c:\DeleteLater\Folder with Spaces\2ndNoSpacesLongName.txt 3870322
c:\DeleteLater\FolderNoSpaces\3rd Name with Spaces.txt 27874695
c:\DeleteLater\FolderNoSpaces\3rdNoSpacesLongName.txt 28726032
বিকল্প # 2: ফর / এফ
ব্রায়ান অ্যাডকিন্স প্রস্তাবিত: @echo off & for /f %a in ('dir /s /b') do echo %~fa %~za
একটি সঠিক উত্তর হ'ল:
@echo off & for /f "delims=*" %A in ('dir /s /b') do echo %~fA %~zA
একটি সম্পূর্ণ ডিরেক্টরি সঙ্গে উত্তর দমন এবং আউটপুট (যোগ করা হয়) একটি ফাইল হল:
@echo Results on %DATE% for %CD% >> YourDirFile.txt & echo off & for /f "delims=*" %A in ('dir /s /b /a:-d') do echo %~fA %~zA >> YourDirFile.txt
দ্রষ্টব্য: "ডিলিমস = *" ফাইলের নামগুলিতে অনুমোদিত নয় এমন একটি অক্ষর নির্দিষ্ট করে।
দ্রষ্টব্য: ২ য় কমান্ড ডিরেক্টরিগুলি / a: -d এর মাধ্যমে দমন করে।
দ্রষ্টব্য: কেউ যদি বিভিন্ন ভেরিয়েবলের নাম চয়ন করে তবে ভেরিয়েবল এবং ভেরিয়েবল পরামিতিগুলির মধ্যে পার্থক্য স্পষ্ট করার জন্য ফর ভেরিয়েবল নামের বড় হাতের তৈরি করে।
দ্রষ্টব্য: ওপি কোনও ফাইলের আউটপুট চেয়েছিল বলে কেবল গ্রিনগুলির জন্য ফাইল করতে যুক্ত হয়েছে।
আমি মনে করি আমার সত্যিই ECHO এর স্থিতি পরীক্ষা করা উচিত এবং এটিকে পুনরায় সেট করা উচিত।
ইস্যু - নামগুলিতে স্পেস
ব্রায়ানের প্রস্তাবিত সমাধান ফাইল এবং ফোল্ডারের নামগুলি ফাঁকা স্থানগুলি হ্যান্ডেল করে না (কমপক্ষে আমার ভিস্তার কনফিগারেশনে নেই)।
উদাহরণ - ভুল
(সীমানা ছাড়াই; ওপিতে প্রতি দমন ডিরেক্টরি অন্তর্ভুক্ত রয়েছে তবে জোর দেওয়ার জন্য ফাইলের আগে এবং পরে ফাইলের আকার সহ)
কাটা নাম এবং আকার (6 টির মধ্যে 4 টি ফাইল ভুল):
@echo off & for /f %A in ('dir /s /b /a:-d') do echo %~zA %~fA %~zA
C:\DeleteLater\Name
21745440 C:\DeleteLater\NoSpacesLongName.txt 21745440
C:\DeleteLater\Folder
C:\DeleteLater\Folder
C:\DeleteLater\FolderNoSpaces\3rd
28726032 C:\DeleteLater\FolderNoSpaces\3rdNoSpacesLongName.txt 28726032
উদাহরণ - সঠিক
(স্ক্রিনে নোট আউটপুট, ফাইলের সাথে সংযুক্ত করা হয়নি)
@echo off & for /f "delims=*" %A in ('dir /s /b /a:-d') do echo %~fA %~zA
C:\DeleteLater\Name with Spaces.txt 19800676
C:\DeleteLater\NoSpacesLongName.txt 21745440
C:\DeleteLater\Folder with Spaces\2nd Name with Spaces.txt 5805492
C:\DeleteLater\Folder with Spaces\2ndNoSpacesLongName.txt 3870322
C:\DeleteLater\FolderNoSpaces\3rd Name with Spaces.txt 27874695
C:\DeleteLater\FolderNoSpaces\3rdNoSpacesLongName.txt 28726032
বিকল্প # 3: ফর্মিলস (উদ্ধৃতি ইস্যু)
এই সমাধানটি ফোরফিল ডকুমেন্টেশন ( forfiles /?
) এর শেষ দুটি উদাহরণ থেকে সরাসরি ।
FORFILES /S /M *.doc /C "cmd /c echo @fsize"
FORFILES /M *.txt /C "cmd /c if @isdir==FALSE notepad.exe @file"
এই উদাহরণগুলির সংমিশ্রণ এবং একটি ফাইলের লিখনের উত্তর পাওয়া যায় (প্রায়):
forfiles /s /c "cmd /c if @isdir==FALSE echo @path @fsize" >>ForfilesOut.txt
লক্ষ্য করুন যে পথটি আউটপুটে উদ্ধৃতিতে রয়েছে।
কিনা কোন ব্যাপার না echo on
বা echo off
টগল করা হয়।
প্রতিটি ডিরেক্টরি পৃথক করে একটি ফাঁকা লাইন যুক্ত করা আইএফের একটি তুচ্ছ এক্সটেনশন হবে।
সতর্কতা : মুখোশ ব্যবহার করে/m *.*
এক্সটেনশন ছাড়াই ফাইলগুলি ফিরবে না (উদাহরণস্বরূপ শেষ ফাইলের মতো)!
একদিকে : এটি প্রতিটি ডিরেক্টরিতে কেবল সেই ডিরেক্টরিটির বিষয়বস্তু সহ একটি ফাইল লিখে দেয়:
forfiles /s /c "cmd /c if @isdir==FALSE echo @path @fsize >>ForfilesSubOut.txt"
ওপি যা চায় তা নয় তবে কখনও কখনও সহজও হয়।
উদাহরণ - কাজ (তবে উদ্ধৃতিতে পুরোপথ সহ)
forfiles /s /c "cmd /c if @isdir==FALSE echo @path @fsize"
"c:\DeleteLater\Name with Spaces.txt" 19800676
"c:\DeleteLater\NoSpacesLongName.txt" 21745440
"c:\DeleteLater\Folder with Spaces\2nd Name with Spaces.txt" 5805492
"c:\DeleteLater\Folder with Spaces\2ndNoSpacesLongName.txt" 3870322
"c:\DeleteLater\FolderNoSpaces\3rd Name with Spaces.txt" 27874695
"c:\DeleteLater\FolderNoSpaces\3rdNoSpacesLongName.txt" 28726032
"c:\DeleteLater\MoreFiles\A really really long file name that goes on and on 123456789 asdfghjkl zxcvnm qwertyuiop and still A really really long file name that goes on and on 123456789 qwertyuiop and still further roughly 225 characters by now.txt" 447
"c:\DeleteLater\MoreFiles\New Text Document no extension" 0
এই উদাহরণে একটি সুপার দীর্ঘ দীর্ঘ নাম এবং একটি এক্সটেনশন ছাড়াই একটি ফাইল নাম সহ একটি অতিরিক্ত ডিরেক্টরি অন্তর্ভুক্ত।
ইস্যু: উদ্ধৃতিগুলিতে পথ
সুতরাং, ওপি উদাহরণ অনুসারে অবাঞ্ছিত (?) উদ্ধৃতিগুলি সরানোর এবং বিকল্প # 3: ফোরফিলগুলি সংরক্ষণ করার কী সহজ উপায় আছে? (অলঙ্কৃত প্রশ্ন: উদ্ধৃতিগুলি কোনও বৈশিষ্ট্য বা কোনও ত্রুটি?)
"tokens=*"
মতো একটি সংযোজন করেছি@echo off & for /f "tokens=*" %a in ('dir /s /b') do echo %~fa %~za