kök ve alt sınırlardaki belirli klasörü sil


-1

Kök ve alt sınırlardaki belirli bir klasörü silmek istiyorum, sorun benim kodum sadece dizinin kök dizinindeki klasörü silmek:

SET dirname=test
SET directory=%cd%
SET found=false


    if NOT "%1%" == "" (
        set directory=%1%
    )
    echo Searching for %dirname% in %directory%

    for /d %%i in (%directory%\%dirname%) do (
        IF EXIST %%i (
            REM change the sentinel value
            set found=true

            echo Deleting the folder %%i
            REM Delete a folder, even if not empty, and don't prompt for confirmation
            RD  /s /q %%i
        )
    )

    REM logic to do if no files were found
    if NOT "%found%" == "true" (
        echo No directories were found with the name of %dirname%
    )

Bu klasör yapısı:

E:sampledelete
├───folder1
├───folder2
│   └───somefolder
├───test
│   └───somefolder
├───newfolder
│   ├───test
│   │   └───somefolder
├───newfolder2
│   ├───test

komut dosyasını çalıştırdıktan sonra şuna değiştirildi:

E:sampledelete
├───folder1
├───folder2
│   └───somefolder
├───newfolder
│   ├───test
│   │   └───somefolder
├───newfolder2
│   ├───test

Burada kullandığınız Windows sürümüyle ilgili soruya bir TAG ekleyebilir misiniz?
— music2myear

Windows 10 kullanıyorum
— Albert222

(0) Lütfen sorunuzu [windows 10] etiketini eklemek için düzenleyin . (1) “Alt-sıra” nedir? (2) Lütfen sorunuzu daha açık bir şekilde belirtmek için düzenleyin .
— Scott,

@scott Düzenledim ve Windows 7 ve Windows 10'da test ettim. Sıkı çalışma sadece kök dizindeki klasörü
— kaldırıyor

Aşağıdaki gibi bir satırı silmeye devam etmek istiyor musunuz: C: \ 1nodeDeep \ 2nodesDeep \ 3nodesDeep \ 4nodesDeep \ ... \ test?
— El8dN8

Yanıtlar:


0

Sorunlar aşağıda açıklanmıştır. Başlıca sorun, dizin yanlış anlaşılmasıydı: kök altındaki 1 düğümün altındaki dizine bakmıyordunuz. Doğru fikrin vardı. Söylediğiniz gibi “yeni” olduğunuz için, farklılıkları analiz etmeye değer.

@echo off
SET dirname=test
SET directory=%cd%
SET found=false

    if NOT "%1%" == "" (
        set directory=%1%
    )

    REM We want to look in the current directory not in for Z:\test
    for /d %%i in (%directory%*) do (
        echo Searching for %%i\%dirname% in %directory%

        REM We already know the folder existed because "do" ran.
        REM We want to look beneath the root directory
        IF EXIST %%i\%dirname% (
            REM change the sentinel value
            set found=true

            REM we want to delete the nodes beneath not the one in root
            echo Deleting the folder %%i\%dirname%

            REM Delete a folder
            REM we want to delete the nodes beneath not the one in root
            RD  /s /q %%i\%dirname%
        )

        IF %%1 == %dirname% (
            REM change the sentinel value
            set found=true

            REM Delete a folder, even if not empty, and don't prompt for confirmation
            echo Deleting the folder %%i\%dirname%
            RD  /s /q %%i
        )
    )

    REM logic to do if no files were found
    if NOT "%found%" == "true" (
        echo No directories were found with the name of %dirname%
    )

teşekkür ederim ama ben kök ve alt klasörlerdeki tüm klasörü kaldırmak istiyorum
— Albert222

0

Ne yaptığını yanlış anlıyorsun for /d.

for / d %% i in ( dir 1 dosya 1 dir 2 dosya 2 dir 3 dosya 3 ) deyimi yap

yapar

  • SET %%i=dir1
  • statement
  • SET %%i=dir2
  • statement
  • SET %%i=dir3
  • statement

Sorun şu ki, sadece nerede olduğunu söylüyorsun . Özyinelemeli bir dizin araması yapan kullanmak istiyorsunuz . Döngünüz gibi bir şey olmalıfor /d %%i in (dir1) do statementdir1
%directory%\%dirname%for /r

    for /r %directory% %%i in (.) do (
        if exist %%i\%dirname% (
            REM change the sentinel value
            set found=true

            echo Deleting the folder %%i\%dirname%
            REM Delete a folder, even if not empty, and don't prompt for confirmation
            RD  /s /q %%i\%dirname%
        )
    )

Özyinelemeli bir arama yapmak istediğinden emin değildim, sadece 1 düğüm aşağıda. Belirli bir dizinin altındaki (veya onun örnek kökünde) sadece 1 düğüm, bu kendi dizinini de içerir. Bunu sormaya çalıştım ama henüz bir cevap alamadım.
— El8dN8

bildiğim şey, / r klasörleri kaldırırken / d iken / d dosyalarını kaldıracak
— Albert222

Ne dediğini anlamıyorum. Yukarıdaki toplu iş dosyasının test, dizin ağacının tüm düzeylerinde adlandırılmış dizinleri silerek Windows 7'de çalıştığını biliyorum . Eğer orada da endişelendiği Are dosyalar adında test? Bunun için test etmedim.
— Scott

İyi? Cevabımı denedin mi? Nasıl çalıştığı ile ilgili herhangi bir sorunuz var mı?
— Scott
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.