উত্তর হিসাবে, 2018-06-01 পোস্ট কোনটিই বাদে একক কমান্ড লাইন দ্বারা পোস্ট করা foxidrive , সত্যিই সব ফাইল এবং সকল ফোল্ডার / ডিরেক্টরি মুছে ফেলা %PathToFolder%
। যে হিসাবে 2018-06-01 ব্যবহার পোস্ট ভাল একটি আরো জটিল সমাধান কেন সব অন্যান্য উত্তর ব্যাখ্যা দিয়ে একটি ব্যাচ ফাইল হিসাবে হিসাবে সব ফাইল এবং একটি ফোল্ডার সাবফোল্ডার মুছে ফেলতে একটি খুব সহজ একক কমান্ড লাইন দিয়ে আরও একটি উত্তর পোস্ট করার জন্য কারণ DEL আর ফর সহ আরডি কোনও ফোল্ডার পুরোপুরি পরিষ্কার করতে ব্যর্থ হয়েছিল।
সাধারণ একক কমান্ড লাইন সমাধান যা অবশ্যই একটি ব্যাচ ফাইলে ব্যবহার করা যেতে পারে:
pushd "%PathToFolder%" 2>nul && ( rd /Q /S "%PathToFolder%" 2>nul & popd )
এই কমান্ড লাইনে একের পর এক কার্যকর করা তিনটি কমান্ড রয়েছে।
প্রথম কমান্ড PUSHD স্ট্যাক এবং পরবর্তী মেকগুলিতে বর্তমান ডিরেক্টরি পাথটি চাপায়%PathToFolder%
কমান্ড প্রক্রিয়া চালানোর জন্য বর্তমান ডিরেক্টরিকে তৈরি করে।
এটি ইউএনসি পাথগুলির জন্য ডিফল্টরূপেও কাজ করে কারণ কমান্ড এক্সটেনশনগুলি ডিফল্টরূপে সক্ষম হয় এবং এই ক্ষেত্রে PUSHD একটি অস্থায়ী ড্রাইভ লেটার তৈরি করে যা সেই নির্দিষ্ট নেটওয়ার্ক সংস্থানকে নির্দেশ করে এবং তারপরে নতুন ড্রাইভ অক্ষর ব্যবহার করে বর্তমান ড্রাইভ এবং ডিরেক্টরি পরিবর্তন করে।
PUSHD হ্যান্ডেল ত্রুটির বার্তা এই আউটপুট stderr নির্দিষ্ট ডিরেক্টরি এ সব অস্তিত্ব নেই যদি:
সিস্টেম নির্দিষ্ট পথ খুঁজে পাচ্ছি না.
এই ত্রুটি বার্তাটি NUL2>nul
ডিভাইসে পুনর্নির্দেশের মাধ্যমে চাপা দেওয়া হয়েছে ।
পরবর্তী কমান্ড আরডি কেবল তখনই কার্যকর করা হয় যখন বর্তমান কমান্ড প্রসেসের জন্য নির্দিষ্ট ডিরেক্টরিতে বর্তমান ডিরেক্টরি পরিবর্তন করা সফল হয়েছিল, অর্থাৎ নির্দিষ্ট ডিরেক্টরিটি উপস্থিত রয়েছে।
কমান্ড আরডি বিকল্প সহ /Q
এবং /S
একটি ডিরেক্টরি সরিয়ে ফেলা শান্তভাবে সব সাবডিরেক্টরি এমনকি যদি নির্দিষ্ট ডিরেক্টরি গোপন বৈশিষ্ট্য সহ বা শুধুমাত্র পাঠযোগ্য বৈশিষ্ট্য সেট দিয়ে ফাইল বা ফোল্ডার রয়েছে। সিস্টেম অ্যাট্রিবিউট কখনও কোনও ফাইল বা ফোল্ডার মোছা প্রতিরোধ করে না।
মুছে ফেলা হয় না:
যে কোনও চলমান প্রক্রিয়াটির জন্য ফোল্ডারগুলি বর্তমান ডিরেক্টরি হিসাবে ব্যবহৃত হয়। কোনও চলমান প্রক্রিয়ার জন্য যদি কোনও ফোল্ডারটিকে বর্তমান ডিরেক্টরি হিসাবে ব্যবহার করা হয় তবে এই জাতীয় ফোল্ডারের পুরো ফোল্ডার ট্রিটিকে মুছা যাবে না।
চলমান অ্যাপ্লিকেশন / প্রক্রিয়া দ্বারা খোলার সময় ফাইলটি মুছে ফেলা রোধ করতে ফাইলগুলিতে অ্যাক্সেস অনুমতি সেট সহ ফাইলগুলির অ্যাক্সেস অনুমতি সহ যে কোনও চলমান প্রক্রিয়া দ্বারা খোলার সময় ফাইলগুলি। এই জাতীয় একটি খোলা ফাইল খোলা ফাইলটিতে পুরো ফোল্ডার ট্রি মুছতেও বাধা দেয়।
যে ফাইলগুলি / ফোল্ডারগুলিতে বর্তমান ব্যবহারকারীর ফাইল / ফোল্ডার মুছতে প্রয়োজনীয় (এনটিএফএস) অনুমতি নেই সেগুলি এই ফাইল / ফোল্ডারে ফোল্ডার ট্রি মুছতে বাধা দেয়।
কোনও ফোল্ডার মোছা না যাওয়ার প্রথম কারণটি এই কমান্ড লাইন দ্বারা নির্দিষ্ট ফোল্ডারের সমস্ত ফাইল এবং সাবফোল্ডার মুছতে ব্যবহৃত হয়, তবে ফোল্ডারটি নিজেই নয়। কমান্ড প্রক্রিয়া চলমান জন্য ফোল্ডারটি অস্থায়ীভাবে বর্তমান ডিরেক্টরি তৈরি করা হয় যা ফোল্ডারটি নিজেই মুছতে বাধা দেয়। অবশ্যই এর ফলে আরডি কমান্ড দ্বারা একটি ত্রুটি বার্তা আউটপুট আসে :
প্রক্রিয়াটি ফাইলটি অ্যাক্সেস করতে পারে না কারণ এটি অন্য প্রক্রিয়া দ্বারা ব্যবহৃত হচ্ছে।
ফাইলটি এখানে ভুল শব্দ যা বাস্তবে ফোল্ডারটি অন্য একটি প্রক্রিয়া দ্বারা ব্যবহৃত হচ্ছে, বর্তমান কমান্ড প্রক্রিয়া যা কমান্ড আরডি চালায় । ভাল, বাস্তবে একটি ফোল্ডার ফাইল সিস্টেমের জন্য একটি বিশেষ ফাইল যা ফাইল বৈশিষ্ট্য ডিরেক্টরি যা এই ত্রুটি বার্তাকে ব্যাখ্যা করে। তবে আমি ফাইল সিস্টেম পরিচালনার খুব গভীর দিকে যেতে চাই না।
এই ত্রুটি বার্তাটি, অন্য সব ত্রুটি বার্তা, যা কারণ উপরে লিখিত তিন কারণের ঘটতে পারে মত, সঙ্গে এটি পুনঃনির্দেশিত দ্বারা দমন করা হয় 2>nul
হাতলের থেকে stderr ডিভাইসে NUL ।
তৃতীয় কমান্ড, পিওপিডি , কমান্ড আরডি- র প্রস্থান মূল্য থেকে স্বাধীনভাবে কার্যকর করা হয় ।
POPD স্ট্যাক থেকে PUSHD দ্বারা চালিত ডিরেক্টরি পথটি পপ করে এবং কমান্ড প্রক্রিয়াটি এই ডিরেক্টরিতে চালিত করার জন্য বর্তমান ডিরেক্টরিকে পরিবর্তিত করে, অর্থাৎ প্রাথমিক বর্তমান ডিরেক্টরিটি পুনরুদ্ধার করে। ইউএনসি ফোল্ডার পাথের ক্ষেত্রে পিওপিডি পুশডের তৈরি অস্থায়ী ড্রাইভ লেটারটি মুছে দেয় ।
দ্রষ্টব্য: পিওপিডি নিঃশব্দে প্রাথমিক বর্তমান ডিরেক্টরিটি পুনরুদ্ধার করতে ব্যর্থ হতে পারে প্রাথমিক বর্তমান ডিরেক্টরি যদি ডিরেক্টরি থাকে না তা পরিষ্কার করার জন্য ডিরেক্টরিটির একটি উপ-ডিরেক্টরি ছিল। এই বিশেষ ক্ষেত্রে %PathToFolder%
বর্তমান ডিরেক্টরি রয়ে গেছে। সুতরাং এটির উপরের কমান্ড লাইনটি কোনও সাব-ডিরেক্টরি থেকে না চালানোর পরামর্শ দেওয়া হচ্ছে%PathToFolder%
।
আরও একটি আকর্ষণীয় বিষয়:
আমি কমান্ড লাইন স্থানীয় ডিরেক্টরি ভাগ করে একটি ইউএনসি পাথ ব্যবহার করার চেষ্টা C:\Temp
ভাগ নাম দিয়ে Temp
এবং ইউএনসি পাথ ব্যবহার \\%COMPUTERNAME%\Temp\CleanTest
এনভায়রনমেন্ট ভেরিয়েবল নির্ধারিত PathToFolder
উইন্ডোজ 7 তাহলে কমান্ড লাইন চলমান বর্তমান ডিরেক্টরির একটি ভাগ স্থানীয় একটি সাব হয় ইউএনসি পাথ, অর্থাত দিয়ে অ্যাক্সেস করা ফোল্ডার C:\Temp\CleanTest\Subfolder1
, Subfolder1
দ্বারা মুছে ফেলা হয় আরডি এবং পরবর্তী POPD তৈরীর চুপটি ব্যর্থ C:\Temp\CleanTest\Subfolder1
আবার বর্তমান ডিরেক্টরী ফলেZ:\CleanTest
চলমান কমান্ড প্রক্রিয়ার জন্য বর্তমান ডিরেক্টরী হিসাবে অবশিষ্ট আছে। সুতরাং এটি খুব খুব বিশেষ ক্ষেত্রে অস্থায়ী ড্রাইভ লেটারটি বর্তমান ডিরেক্টরিটি পরিবর্তিত না হওয়া অবধি অবধি উদাহরণস্বরূপ থাকেcd /D %SystemRoot%
একটি স্থানীয় ডিরেক্টরি সত্যিই বিদ্যমান। দুর্ভাগ্যক্রমে পিওপিডি টির0 এর বেশি মানের সাথে প্রস্থান হয় না যদি এটি প্রাথমিক বর্তমান ডিরেক্টরিটি পুনরুদ্ধার করতে ব্যর্থ হয় তবে কেবলমাত্র পিওপিডি- র প্রস্থান কোডটি ব্যবহার করে খুব বিশেষ ত্রুটির শর্তটি সনাক্ত করা অসম্ভব হয়ে পড়ে । তবে, ধারণা করা যেতে পারে যে ইউএনসির পাথগুলি সাধারণত স্থানীয় ফাইল এবং ফোল্ডার অ্যাক্সেসের জন্য ব্যবহার করা হয় না বলে কেউ এই খুব বিশেষ ত্রুটির ক্ষেত্রে কখনও যায় না।
ব্যবহৃত কমান্ডগুলি আরও ভালভাবে বোঝার জন্য, একটি কমান্ড প্রম্পট উইন্ডোটি খুলুন, নিম্নলিখিত কমান্ডগুলি সম্পাদন করুন এবং প্রতিটি কমান্ডের জন্য প্রদর্শিত সহায়তাটি খুব যত্ন সহকারে পড়ুন।
উইন্ডোজ ব্যাচ ফাইল ব্যবহার করে একাধিক কমান্ডের সাথে একক লাইন অপারেটরদের ব্যাখ্যা করে &&
এবং &
এখানে ব্যবহৃত।
পরবর্তী আমাদের ব্যাচ ফাইল সমাধান কমান্ড ব্যবহার করে দেখা যাক DEL ফাইল মুছে ফেলতে %PathToFolder%
এবং জন্য এবং আরডি মধ্যে সাবফোল্ডার মুছে ফেলতে %PathToFolder%
।
@echo off
setlocal EnableExtensions DisableDelayedExpansion
rem Clean the folder for temporary files if environment variable
rem PathToFolder is not defined already outside this batch file.
if not defined PathToFolder set "PathToFolder=%TEMP%"
rem Remove all double quotes from folder path.
set "PathToFolder=%PathToFolder:"=%"
rem Consisted the folder path only of double quotes?
if not defined PathToFolder goto EndCleanFolder
rem Remove a backslash at end of folder path.
if "%PathToFolder:~-1%" == "\" set "PathToFolder=%PathToFolder:~0,-1%"
rem Consisted folder path only of a backslash (with one or more double quotes)?
if not defined PathToFolder goto EndCleanFolder
rem Delete all files in specified folder including files with hidden
rem or read-only attribute set, except the files currently opened by
rem a running process which prevents deletion of the file while being
rem opened by the application, or on which the current user has not
rem the required permissions to delete the file.
del /A /F /Q "%PathToFolder%\*" >nul 2>nul
rem Delete all subfolders in specified folder including those with hidden
rem attribute set recursive with all files and subfolders, except folders
rem being the current directory of any running process which prevents the
rem deletion of the folder and all folders above, folders containing a file
rem opened by the application which prevents deletion of the file and the
rem entire folder structure to this file, or on which the current user has
rem not the required permissions to delete a folder or file in folder tree
rem to delete.
for /F "eol=| delims=" %%I in ('dir "%PathToFolder%\*" /AD /B 2^>nul') do rd /Q /S "%PathToFolder%\%%I" 2>nul
:EndCleanFolder
endlocal
ব্যাচ ফাইলটি প্রথমে নিশ্চিত করে যে পরিবেশের পরিবর্তনশীলটি PathToFolder
ডাবল কোট ছাড়াই এবং শেষে ব্যাকস্ল্যাশ ছাড়াই একটি ফোল্ডার পাথ দিয়ে সত্যই সংজ্ঞায়িত। ব্যাকস্ল্যাশটি শেষে কোনও সমস্যা হবে না তবে ফোল্ডারের পথে ডাবল উদ্ধৃতিগুলি সমস্যাযুক্ত হতে পারে কারণ PathToFolder
ব্যাচের ফাইল এক্সিকিউশন চলাকালীন অন্যান্য স্ট্রিংগুলির সাথে মানটির সাথে মিল রয়েছে।
দুটি লাইন গুরুত্বপূর্ণ:
del /A /F /Q "%PathToFolder%\*" >nul 2>nul
for /F "eol=| delims=" %%I in ('dir "%PathToFolder%\*" /AD /B 2^>nul') do rd /Q /S "%PathToFolder%\%%I" 2>nul
কমান্ড ডিল কমান্ডটি নির্দিষ্ট ডিরেক্টরিতে সমস্ত ফাইল মুছতে ব্যবহৃত হয়।
- বিকল্পটি
/A
হ'ল গুপ্ত বৈশিষ্ট্যযুক্ত ফাইল সহ সমস্ত ফাইল প্রক্রিয়া করার জন্য অপশনটি প্রয়োজনীয় যা ডিলেট বিকল্পটি ব্যবহার না করে উপেক্ষা করবে /A
।
/F
কেবলমাত্র পঠনযোগ্য অ্যাট্রিবিউট সেট দিয়ে ফাইলগুলি মুছে ফেলার জন্য বিকল্পটি প্রয়োজনীয়।
/Q
একাধিক ফাইল সত্যিকার অর্থে মুছে ফেলা উচিত যদি ব্যবহারকারীকে অনুরোধ না করে একাধিক ফাইলের নিঃশব্দ মুছে ফেলার জন্য বিকল্পটি প্রয়োজনীয়।
>nul
STDOUT কে হ্যান্ডল করতে লিখিত ফাইল নামের আউটপুট পুনঃনির্দেশ করা প্রয়োজন ডিভাইসটিতে NUL এর মধ্যে মুছে ফেলা যায় না কারণ একটি ফাইল বর্তমানে খোলা আছে বা ব্যবহারকারীর ফাইল মুছার অনুমতি নেই।
2>nul
প্রতিটি ফাইল যা হ্যান্ডেল থেকে মুছে ফেলা যাবে না জন্য ত্রুটির বার্তা আউটপুট পুনর্নির্দেশ করা প্রয়োজন stderr ডিভাইসে NUL ।
নির্দিষ্ট ডিরেক্টরিতে সমস্ত উপ-ডিরেক্টরি মুছে ফেলার জন্য ফর এবং আরডি কমান্ডগুলি ব্যবহৃত হয়। কিন্তু for /D
কারণ ব্যবহার করা হয় না জন্য গোপন বৈশিষ্ট্য সেট দিয়ে এই ক্ষেত্রে সাবডিরেক্টরি মধ্যে উপেক্ষা করা হয়। এই কারণে for /F
ব্যাকগ্রাউন্ডে পৃথক কমান্ড প্রক্রিয়া শুরু করে নিম্নলিখিত কমান্ড লাইনটি চালানোর জন্য ব্যবহৃত হয় %ComSpec% /c
:
dir "%PathToFolder%\*" /AD /B 2>nul
ডিআর আউটপুটগুলি খালি ফর্ম্যাটে কারণ /B
অ্যাট্রিবিউটের সাথে ডিরেক্টরি এন্ট্রি D
, অর্থাত্ নির্দিষ্ট ডিরেক্টরিতে থাকা সমস্ত উপ-ডিরেক্টরিগুলির নাম যেমন কোনও পাথ ছাড়াই লুকানো অ্যাট্রিবিউটের মতো আলাদা বৈশিষ্ট্যগুলিতে স্বাধীন। 2>nul
দ্বারা ত্রুটির বার্তা আউটপুট পুনর্নির্দেশ করতে ব্যবহৃত হয় থেকে DIR কোনো সংগ্রহ নেই হাতল থেকে পাওয়া উপর stderr ডিভাইসে NUL ।
ফেরৎ অপারেটর >
ক্যারেট অক্ষর দিয়ে পালিয়ে করা আবশ্যক, ^
, উপর জন্য কমান্ড লাইন একটি আক্ষরিক চরিত্র যখন উইন্ডোজ কমান্ড অনুবাদক কমান্ড নির্বাহ করার আগে এই কমান্ড লাইন প্রক্রিয়া হিসেবে ব্যাখ্যা করা জন্য যা এমবেডেড executes dir
একটি পৃথক কমান্ড প্রক্রিয়ায় কমান্ড লাইন শুরু পটভূমিতে.
জন্য প্রসেস বন্দী আউটপুট হ্যান্ডেল লেখা stdout- এ একটি শুরু কমান্ড প্রক্রিয়া যার পথ ছাড়া সাবডিরেক্টরি নাম এবং উদ্ধৃতি চিহ্ন মধ্যে লেখা কখনোই হয়।
জন্য বিকল্প /F
খালি লাইন যা এখানে ঘটবে না উপেক্ষা করে থেকে DIR বিকল্প /B
না আউটপুট খালি লাইন আছে।
জন্য একটি সেমিকোলন যা লাইন চরিত্র ডিফল্ট শেষ দিয়ে শুরু লাইন উপেক্ষা করবে। একটি ডিরেক্টরি নাম একটি সেমিকোলন দিয়ে শুরু করতে পারেন। এই কারণেই eol=|
উল্লম্ব বার অক্ষরকে শেষ-পংক্তির অক্ষর হিসাবে সংজ্ঞায়িত করতে ব্যবহৃত হয় যা কোনও ডিরেক্টরি বা ফাইলের নামে থাকতে পারে না।
জন্য স্থান এবং অনুভূমিক ট্যাবটি ডিলিমিটার হিসাবে লাইনটি সাবস্ট্রিংগুলিতে বিভক্ত করবে এবং নির্দিষ্ট লুপ ভেরিয়েবলের জন্য কেবল প্রথম স্থান / ট্যাব সীমিত স্ট্রিং সরবরাহ করবে I
। এই বিভাজনমূলক আচরণটি এখানে চাওয়া হয়নি কারণ একটি ডিরেক্টরি নামে এক বা একাধিক স্পেস থাকতে পারে। সুতরাং delims=
লাইন বিভাজন আচরণ অক্ষম করতে লুপ ভেরিয়েবল I
, সর্বদা সম্পূর্ণ ডিরেক্টরি নাম হিসাবে নির্ধারিত করার জন্য সীমান্তকারীদের একটি খালি তালিকা সংজ্ঞায়িত করতে ব্যবহৃত হয় ।
কমান্ড ফর কমান্ড আরডি কমান্ডটি প্রতিটি ডিরেক্টরি নামের জন্য কোনও পাথ ছাড়াই চালিত করে যে কারণটি আরডি কমান্ড লাইনে ফোল্ডারটির পথটি আবার অবশ্যই নির্দিষ্ট করতে হবে যা সাবফোল্ডার নামের সাথে সংযুক্ত হয়।
ব্যবহৃত কমান্ডগুলি বোঝার জন্য এবং তারা কীভাবে কাজ করে তা জানতে একটি কমান্ড প্রম্পট উইন্ডোটি খুলুন, নিম্নলিখিত কমান্ডগুলি সম্পাদন করুন এবং প্রতিটি কমান্ডের জন্য প্রদর্শিত সমস্ত সহায়তা পৃষ্ঠাগুলি খুব মনোযোগ সহকারে পড়ুন।
del /?
dir /?
echo /?
endlocal /?
for /?
goto /?
if /?
rd /?
rem /?
set /?
setlocal /?