web-dev-qa-db-ja.com

バッチ-rmdirコマンドで「ディレクトリが空ではありません」を取得

私はバッチスクリプトを作成していますが、スクリプトの一部はディレクトリとそのすべてのサブディレクトリを削除しようとしています。サブディレクトリが空でないという断続的なエラーが表示されます。インデックス作成が原因であるという記事を1つ読みました。 WSearchを無効にしましたが、最終的に再びエラーが発生しました。

rmdir /S /Q "C:\<dir>\"
74
Mayhem

ハリー・ジョンストンが言ったのと同じ問題を経験しました。 rmdir /s /qは、/sが空にすることを意図しているにもかかわらず、ディレクトリが空ではないと文句を言います!個人的にはWindowsのバグだと思います。

私の回避策は、ディレクトリ自体を削除する前に、ディレクトリ内のdelをすべて使用することです。

del /f /s /q mydir 1>nul
rmdir /s /q mydir

1>nulは、delの標準出力を非表示にします。そうしないと、削除するすべてのファイルがリストされます。)

60
BoffinbraiN

私はこの問題に精通しています。最も簡単な回避策は、条件付きで操作を繰り返すことです。私はそれが連続して2回失敗するのを見たことがない-実際に開いているファイルまたはアクセス許可の問題がない限り、明らかに!

rd /s /q c:\deleteme
if exist c:\deleteme rd /s /q c:\deleteme
38
Harry Johnston

同じ問題が発生したばかりで、一部のファイルが失われたり破損したりすることに関係していました。問題を修正するには、チェックディスクを実行します。

chkdsk /F e:

これは、検索ウィンドウボックスまたはcmdプロンプトから実行できます。 /Fは、ファイルの回復など、見つかった問題を修正します。これが実行を終了したら、通常のようにファイルとフォルダーを削除できます。

18
jrose

管理者としてコマンドプロンプトを入力し、実行します

rmdir /s <FOLDER>
15
Adilson Cabral

@gfullamが@BoffinbraiNの回答へのコメントで述べたように、あなたが削除する<dir>はファイルを含むものではないかもしれません:<dir>にサブディレクトリがあり、メッセージと唯一の解決策は、ディレクトリを再帰的に繰り返し、含まれるファイルをすべて手動で削除することです...私は、UNIXのrmのポートを使用することにしました。 rm.exeには、Git Bash、MinGW、Cygwin、GnuWin32などが付属しています。 PATHに親ディレクトリが必要であり、UNIXシステムの場合と同様に実行する必要があります。

バッチスクリプトの例:

set PATH=C:\cygwin64\bin;%PATH%
rm -rf "C:\<dir>"
3
Gobe

同様の問題があり、Windows Explorerを使用して空のフォルダーを削除しようとしました。空ではないエラーが表示されたため、admin cmdを使用して試してみようと思いましたが、ここでの答えはどれも役に立ちませんでした。

ファイルを空のフォルダーに移動した後、空でないフォルダーを削除できました

2
Grisu118

私のために働いたのは次のとおりです。私は、RMDirコマンドがほぼ常に「ディレクトリが空ではありません」を発行するようです...

:Cleanup_Temporary_Files_and_Folders

Erase /F /S /Q C:\MyDir

RMDir /S /Q C:\MyDir
If  Exist  C:\MyDir  GoTo Cleanup_Temporary_Files_and_Folders
1
user7432246

「C:\ Users\User Name\OneDrive\Fonts」があり、これは「C:\ Windows\Fonts」にmklink '(/ D)されていて、同じ問題でした。私の場合

cd "C:\ Users \ユーザー名\ OneDrive"

rd/sフォント

Y (to confirm the action)

助けて頂きました。それがあなたにも役立つことを願っています; D

1
Maciej Bl

私の場合、フォルダをルートディレクトリに移動しただけです。

move <source directory> c:\

そして、コマンドを実行してディレクトリを削除しました

rmdir c:\<moved directory> /s /q
1
Daniel Barde

次の原因が考えられます。

  1. より高い許可が必要なファイルまたはサブディレクトリがあります
  2. 使用中のファイルがあります。WSearchだけでなく、お使いのウイルススキャナなどでも使用できます。

1.)の場合は、runas /user:Administratorを試して、より高い特権を取得するか、コンテキストメニューから管理者としてバッチファイルを開始できます。それでも解決しない場合は、管理者でさえ権限を持っていない可能性があります。次に、ディレクトリの所有権を引き継ぐ必要があります。

2.)のダウンロード Process ExplorerFind/Find handle or DLL...をクリックするか、 Ctrl+F、ディレクトリの名前を入力し、それを使用するユーザーを見つけます。可能であれば、ディレクトリを使用するアプリケーションを閉じます。

0
Thomas Weller

ハリー・ジョンストンの答えと同様に、うまくいくまでループします。

set dirPath=C:\temp\mytest
:removedir
if exist "%dirPath%" (
    rd /s /q "%dirPath%" 
    goto removedir
)
0
BuvinJ