ルートとサブディレクトリ内の特定のフォルダを削除する

ルートとサブディレクトリ内の特定のフォルダを削除する

ルートとサブディレクトリ内の特定のフォルダを削除したいのですが、問題は私のコードがディレクトリのルート内のフォルダのみを削除することです。

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%
    )

フォルダ構造は次のとおりです。

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

スクリプトを実行した後、次のように変更されました:

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

答え1

問題は以下に注釈されています。主な問題はディレクトリの誤解でした。ルートの 1 ノード下のディレクトリ内を調べていませんでした。あなたの考えは正しかったです。あなたが言ったようにあなたは「初心者」なので、違いを分析する価値はあるでしょう。

@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%
    )

答え2

あなたは、何for /dがそうなのかを誤解しています。

/d %%i の場合 (ディレクトリ1ファイル1ディレクトリ2ファイル2ディレクトリ3ファイル3) する声明

する

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

問題は、 が であるところでとだけ言っていることです。 を使用すれば、再帰的なディレクトリ検索ができます。ループは次のようになります。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%
        )
    )

関連情報