सबसे पहले, आइए समीक्षा करें कि क्या rm -rf
होता है:
C:\Users\ohnob\things>touch stuff.txt
C:\Users\ohnob\things>rm -rf stuff.txt
C:\Users\ohnob\things>mkdir stuff.txt
C:\Users\ohnob\things>rm -rf stuff.txt
C:\Users\ohnob\things>ls -l
total 0
C:\Users\ohnob\things>rm -rf stuff.txt
rm -rf
आमतौर पर उपयोग किए जाने वाले तीन परिदृश्य हैं, जहां से लौटने की उम्मीद है 0
:
- निर्दिष्ट पथ मौजूद नहीं है।
- निर्दिष्ट पथ मौजूद है और एक निर्देशिका है।
- निर्दिष्ट पथ मौजूद है और एक फ़ाइल है।
मैं संपूर्ण अनुमतियों की बात को अनदेखा करने जा रहा हूं, लेकिन कोई भी अनुमतियों का उपयोग नहीं करता है या स्वयं को Windows वैसे भी चीजों पर पहुंच लिखने से इनकार करने की कोशिश करता है (ठीक है, यह एक मजाक है ...)।
पहले 0 पर सेट ERRORLEVEL
करें और उसके बाद ही पथ को हटाएं यदि यह मौजूद है, तो यह एक निर्देशिका के आधार पर अलग-अलग आदेशों का उपयोग कर रहा है। यदि पथ मौजूद नहीं है, तो 0 पर IF EXIST
सेट ERRORLEVEL
नहीं होता है, इसलिए ERRORLEVEL
सामान्य rm -rf
उपयोग की नकल करने वाले तरीके से सफलता का ठीक से पता लगाने के लिए 0 पर सेट करना आवश्यक है । के RD
साथ की रक्षा IF EXIST
आवश्यक है RD
, क्योंकि इसके विपरीतrm -f
, यदि लक्ष्य मौजूद नहीं है, तो एक त्रुटि होगी।
निम्न स्क्रिप्ट स्निपेट मानती है कि DELPATH प्रीक्वॉटेड है। (यह तब सुरक्षित होता है जब आप कुछ ऐसा करते हैं SET DELPATH=%1
। इसे ECHO %1
अंदर रखने .cmd
और इसमें रिक्त स्थान के साथ एक तर्क देने की कोशिश करें और देखें कि आपके लिए क्या होता है)। स्निपेट पूरा होने के बाद, आप विफलता की जांच कर सकते हैं IF ERRORLEVEL 1
।
: # Determine whether we need to invoke DEL or RD or do nothing.
SET DELPATH_DELMETHOD=RD
PUSHD %DELPATH% 2>NUL
IF ERRORLEVEL 1 (SET DELPATH_DELMETHOD=DEL) ELSE (POPD)
IF NOT EXIST %DELPATH% SET DELPATH_DELMETHOD=NOOP
: # Reset ERRORLEVEL so that the last command which
: # otherwise set it does not cause us to falsely detect
: # failure.
CMD /C EXIT 0
IF %DELPATH_DELMETHOD%==DEL DEL /Q %DELPATH%
IF %DELPATH_DELMETHOD%==RD RD /S /Q %DELPATH%
बिंदु, सब कुछ सरल है जब पर्यावरण बस पोसिक्स के अनुरूप होता है। या यदि आप एक न्यूनतम MSYS स्थापित करते हैं और बस उसी का उपयोग करते हैं।