सबसे पहले, आइए समीक्षा करें कि क्या 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 स्थापित करते हैं और बस उसी का उपयोग करते हैं।