私はバッチスクリプトを作成していますが、スクリプトの一部はディレクトリとそのすべてのサブディレクトリを削除しようとしています。サブディレクトリが空でないという断続的なエラーが表示されます。インデックス作成が原因であるという記事を1つ読みました。 WSearchを無効にしましたが、最終的に再びエラーが発生しました。
rmdir /S /Q "C:\<dir>\"
ハリー・ジョンストンが言ったのと同じ問題を経験しました。 rmdir /s /q
は、/s
が空にすることを意図しているにもかかわらず、ディレクトリが空ではないと文句を言います!個人的にはWindowsのバグだと思います。
私の回避策は、ディレクトリ自体を削除する前に、ディレクトリ内のdel
をすべて使用することです。
del /f /s /q mydir 1>nul
rmdir /s /q mydir
(1>nul
は、del
の標準出力を非表示にします。そうしないと、削除するすべてのファイルがリストされます。)
私はこの問題に精通しています。最も簡単な回避策は、条件付きで操作を繰り返すことです。私はそれが連続して2回失敗するのを見たことがない-実際に開いているファイルまたはアクセス許可の問題がない限り、明らかに!
rd /s /q c:\deleteme
if exist c:\deleteme rd /s /q c:\deleteme
同じ問題が発生したばかりで、一部のファイルが失われたり破損したりすることに関係していました。問題を修正するには、チェックディスクを実行します。
chkdsk /F e:
これは、検索ウィンドウボックスまたはcmdプロンプトから実行できます。 /F
は、ファイルの回復など、見つかった問題を修正します。これが実行を終了したら、通常のようにファイルとフォルダーを削除できます。
管理者としてコマンドプロンプトを入力し、実行します
rmdir /s <FOLDER>
@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>"
同様の問題があり、Windows Explorerを使用して空のフォルダーを削除しようとしました。空ではないエラーが表示されたため、admin cmdを使用して試してみようと思いましたが、ここでの答えはどれも役に立ちませんでした。
ファイルを空のフォルダーに移動した後、空でないフォルダーを削除できました
私のために働いたのは次のとおりです。私は、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
「C:\ Users\User Name\OneDrive\Fonts」があり、これは「C:\ Windows\Fonts」にmklink '(/ D)されていて、同じ問題でした。私の場合
cd "C:\ Users \ユーザー名\ OneDrive"
rd/sフォント
Y (to confirm the action)
助けて頂きました。それがあなたにも役立つことを願っています; D
私の場合、フォルダをルートディレクトリに移動しただけです。
move <source directory> c:\
そして、コマンドを実行してディレクトリを削除しました
rmdir c:\<moved directory> /s /q
次の原因が考えられます。
1.)の場合は、runas /user:Administrator
を試して、より高い特権を取得するか、コンテキストメニューから管理者としてバッチファイルを開始できます。それでも解決しない場合は、管理者でさえ権限を持っていない可能性があります。次に、ディレクトリの所有権を引き継ぐ必要があります。
2.)のダウンロード Process Explorer 、Find/Find handle or DLL...
をクリックするか、 Ctrl+F、ディレクトリの名前を入力し、それを使用するユーザーを見つけます。可能であれば、ディレクトリを使用するアプリケーションを閉じます。
ハリー・ジョンストンの答えと同様に、うまくいくまでループします。
set dirPath=C:\temp\mytest
:removedir
if exist "%dirPath%" (
rd /s /q "%dirPath%"
goto removedir
)