windows - PowerShell 2.0 के साथ एक संपूर्ण निर्देशिका को दोबारा कैसे हटाएं?




windows-7 filesystems (10)

PowerShell का उपयोग सभी फाइलों और फ़ोल्डरों को हटाने के लिए करता है

निकालें-आइटम -पथ "सी: \ डॉटनेट-हेल्पर्स *। *" -क्रिकर्स

रिकर्स नीचे ड्रिल करता है और बहुत अधिक फाइलें पाता है। - रिकर्स पैरामीटर PowerShell को अनुमति मांगे बिना किसी भी बच्चे के आइटम को हटाने की अनुमति देगा। इसके अतिरिक्त, छुपा या केवल-पढ़ने वाली फ़ाइलों को हटाने के लिए -force पैरामीटर जोड़ा जा सकता है।

-फोर्स कमांड का उपयोग करके हम पूरी तरह से फाइलों को हटा सकते हैं

PowerShell का उपयोग पूरी तरह से सभी फाइल बल को हटाने के लिए करता है

निकालें-आइटम -पथ "सी: \ डॉटनेट-हेल्पर्स *। *" -फोर्स

उदाहरण के साथ: http://dotnet-helpers.com/powershell-demo/how-to-delete-a-folder-or-file-using-powershell/

PowerShell में एक निर्देशिका और इसकी सभी उपनिर्देशिका को मजबूती से हटाने का सबसे आसान तरीका क्या है? मैं विंडोज 7 में पावरशेल वी 2 का उपयोग कर रहा हूं।

मैंने कई स्रोतों से सीखा है कि सबसे स्पष्ट कमांड, Remove-Item $targetDir -Recurse -Force , सही तरीके से काम नहीं करता है। इसमें PowerShell V2 ऑनलाइन सहायता में एक बयान शामिल है ( Get-Help Remove-Item -Examples का उपयोग करके पाया गया) जो कहता है:

... क्योंकि इस cmdlet में रिकर्स पैरामीटर दोषपूर्ण है, वांछित फ़ाइलों को प्राप्त करने के लिए आदेश Get-Childitem cmdlet का उपयोग करता है, और यह निकालें-आइटम cmdlet को पास करने के लिए पाइपलाइन ऑपरेटर का उपयोग करता है ...

मैंने विभिन्न उदाहरण देखे हैं जो Get-ChildItem का उपयोग करते हैं और इसे निकालें-आइटम पर पाइप करते हैं, लेकिन उदाहरण आमतौर पर फ़िल्टर के आधार पर फ़ाइलों के कुछ सेट को हटाते हैं, न कि संपूर्ण निर्देशिका।

मैं कम से कम कोड का उपयोग कर किसी भी उपयोगकर्ता चेतावनी संदेश उत्पन्न किए बिना, संपूर्ण निर्देशिका, फ़ाइलों और बाल निर्देशिकाओं को उड़ाने का सबसे साफ तरीका ढूंढ रहा हूं। यदि एक समझने में आसान हो तो एक लाइनर अच्छा होगा।


इस उदाहरण का प्रयास करें। यदि निर्देशिका मौजूद नहीं है, तो कोई त्रुटि नहीं उठाई जाती है। आपको PowerShell v3.0 की आवश्यकता हो सकती है।

remove-item -path "c:\Test Temp\Test Folder" -Force -Recurse -ErrorAction SilentlyContinue

कभी-कभी एक संपूर्ण फ़ोल्डर पेड़ को हटाना कभी-कभी काम करता है और कभी-कभी "निर्देशिका खाली नहीं" त्रुटियों में विफल रहता है। इसके बाद यह जांचने का प्रयास कर रहा है कि फ़ोल्डर अभी भी मौजूद है या नहीं, "एक्सेस अस्वीकृत" या "अनधिकृत एक्सेस" त्रुटियों का परिणाम हो सकता है। मुझे नहीं पता कि ऐसा क्यों होता है, हालांकि इस स्टैक ओवरफ्लो पोस्टिंग से कुछ अंतर्दृष्टि प्राप्त की जा सकती है।

मैं ऑर्डर निर्दिष्ट करके इन मुद्दों को हल करने में सक्षम हूं जिसमें फ़ोल्डर के भीतर आइटम हटा दिए जाते हैं, और देरी जोड़कर। निम्नलिखित मेरे लिए अच्छा चलाता है:

# First remove any files in the folder tree
Get-ChildItem -LiteralPath $FolderToDelete -Recurse -Force | Where-Object { -not ($_.psiscontainer) } | Remove-Item –Force

# Then remove any sub-folders (deepest ones first).    The -Recurse switch may be needed despite the deepest items being deleted first.
ForEach ($Subfolder in Get-ChildItem -LiteralPath $FolderToDelete -Recurse -Force | Select-Object FullName, @{Name="Depth";Expression={($_.FullName -split "\\").Count}} | Sort-Object -Property @{Expression="Depth";Descending=$true}) { Remove-Item -LiteralPath $Subfolder.FullName -Recurse -Force }

# Then remove the folder itself.  The -Recurse switch is sometimes needed despite the previous statements.
Remove-Item -LiteralPath $FolderToDelete -Recurse -Force

# Finally, give Windows some time to finish deleting the folder (try not to hurl)
Start-Sleep -Seconds 4

PowerShell में परिकलित गुणों का उपयोग करने वाला एक Microsoft TechNet आलेख गहराई से क्रमबद्ध उप-फ़ोल्डर की सूची प्राप्त करने में मेरे लिए सहायक था।

आरडी / एस / क्यू के साथ समान विश्वसनीयता मुद्दों को आरडी / एस / क्यू चलाने से हल किया जा सकता है - आदर्श रूप से बीच में एक विराम (यानी नीचे दिखाए गए पिंग का उपयोग करके)।

RD /S /Q "C:\Some\Folder\to\Delete" > nul
if exist "C:\Some\Folder\to\Delete"  ping -4 -n 4 127.0.0.1 > nul
if exist "C:\Some\Folder\to\Delete"  RD /S /Q "C:\Some\Folder\to\Delete" > nul

कुछ कारणों से जॉन रीस का जवाब कभी-कभी मेरे मामले में काम नहीं करता था। लेकिन यह मुझे निम्नलिखित दिशा में ले गया। सबसे पहले मैं छोटी गाड़ी-रिकर्स विकल्प के साथ निर्देशिका को हटाने की कोशिश करता हूं। बाद में मैं हर उपदिर में उतरता हूं जो सभी फाइलों को छोड़ देता है और हटा देता है।

function Remove-Tree($Path)
{ 
    Remove-Item $Path -force -Recurse -ErrorAction silentlycontinue

    if (Test-Path "$Path\" -ErrorAction silentlycontinue)
    {
        $folders = Get-ChildItem -Path $Path –Directory -Force
        ForEach ($folder in $folders)
        {
            Remove-Tree $folder.FullName
        }

        $files = Get-ChildItem -Path $Path -File -Force

        ForEach ($file in $files)
        {
            Remove-Item $file.FullName -force
        }

        if (Test-Path "$Path\" -ErrorAction silentlycontinue)
        {
            Remove-Item $Path -force
        }
    }
}

फ़ोल्डर संरचना उपयोग सहित पूरी सामग्री को हटाने के लिए

get-childitem $dest -recurse | foreach ($_) {remove-item $_.fullname -recurse}

-recurse गई -recurse जोड़ा गया -recurse सुनिश्चित करता है कि इंटरैक्टिव प्रॉम्प्ट अक्षम हैं।


मैंने उपरोक्त @ जॉन-रीस द्वारा प्रेरित एक और दृष्टिकोण लिया - खासकर जब किसी बिंदु पर मेरे दृष्टिकोण में विफल होना शुरू हुआ। मूल रूप से subtree और सॉर्ट फ़ाइलों को उनकी पथ-लंबाई से पुन: व्यवस्थित करें - सबसे लंबे समय तक सबसे कम से हटाएं

Get-ChildItem $tfsLocalPath -Recurse |  #Find all children
    Select-Object FullName,@{Name='PathLength';Expression={($_.FullName.Length)}} |  #Calculate the length of their path
    Sort-Object PathLength -Descending | #sort by path length descending
    %{ Get-Item -LiteralPath $_.FullName } | 
    Remove-Item -Force

-लिटरलपैथ जादू के बारे में, यहां एक और गॉच्य है जो आपको मार सकता है: https://superuser.com/q/212808


वास्तव में सरल:

remove-item -path <type in file or directory name>, press Enter

स्वीकार किए गए उत्तर की "निर्देशिका खाली नहीं है" त्रुटियों से बचने के लिए, पहले सुझाए गए अच्छे पुराने डॉस कमांड का उपयोग करें। प्रतिलिपि बनाने के लिए तैयार पूर्ण पीएस वाक्यविन्यास है:

& cmd.exe /c rd /S /Q $folderToDelete

$users = get-childitem \\ServerName\c$\users\ | select -ExpandProperty name

foreach ($user in $users)

{
remove-item -path "\\Servername\c$\Users\$user\AppData\Local\Microsoft\Office365\PowerShell\*" -Force -Recurse
Write-Warning "$user Cleaned"
}

मूल निर्देशिका को हटाने के बिना उपरोक्त कुछ लॉगफाइल साफ़ करने के लिए लिखा है और यह पूरी तरह से काम करता है!


Remove-Item -Recurse -Force some_dir

वास्तव में यहां विज्ञापन के रूप में काम करता है।

rm -r -fo some_dir

शॉर्टैंड उपनाम हैं जो भी काम करते हैं।

जहां तक ​​मैं इसे समझ गया, -Recurse पैरामीटर सही ढंग से काम नहीं करता है जब आप फ़ाइलों के फ़िल्टर किए गए सेट को -Recurse हटाने का प्रयास करते हैं। एक ही डीआईआर की हत्या के लिए और नीचे सबकुछ ठीक काम करता प्रतीत होता है।





delete-directory