ルートとサブディレクトリ内の特定のフォルダを削除したいのですが、問題は私のコードがディレクトリのルート内のフォルダのみを削除することです。
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 statement
dir1
%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%
)
)