バッチスクリプトを作成していますが、スクリプトの一部でディレクトリとそのすべてのサブディレクトリを削除しようとしています。サブディレクトリが空でないという断続的なエラーが発生します。インデックス作成が原因であるという記事を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
にします。それ以外の場合は、削除するすべてのファイルを一覧表示します。)
mydir
が同じ「空ではない」エラーを生成するシナリオに遭遇しました。私がしなければならなかったようcd
にmydir
して実行しdel
、これらのディレクトリのそれぞれと同様にファイルに。最終的にはうまくいきましたが、別のサブレベルでこのプロセスを3回繰り返さなければならなかったとしたら、かなり敗北したと感じていたでしょう。
del /s
です。
rd /s /q mydir
コマンドのみを使用して削除のジョブが完了します。
私はこの問題に精通しています。最も簡単な回避策は、条件付きで操作を繰り返すことです。開いているファイルやアクセス許可の問題が実際にない限り、2回続けて失敗するのを見たことがありません。
rd /s /q c:\deleteme
if exist c:\deleteme rd /s /q c:\deleteme
IF EXIST
皮革Access is denied
やその他の状況。私はDIR c:\deleteme
すべての前にエラーチェックのようなものを追加しました。
@gfullamが@BoffinbraiNの回答へのコメントで述べたように、<dir>
削除しようとしているのはファイルを含むものではない可能性があります。<dir>
「ディレクトリは空ではありません」というメッセージを受け取るサブディレクトリが存在する可能性があり、その場合の唯一の解決策は次のとおりです。ディレクトリを再帰的に繰り返し、含まれているすべてのファイルを手動で削除します...私は最終的に次のポートを使用することにしました。rm
UNIXからの。rm.exe
Git Bash、MinGW、Cygwin、GnuWin32などが付属しています。PATHに親ディレクトリがあり、UNIXシステムの場合と同じように実行する必要があります。
バッチスクリプトの例:
set PATH=C:\cygwin64\bin;%PATH%
rm -rf "C:\<dir>"
私のために働いたのは次のとおりです。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 \ UserName \ OneDrive \ Fonts」があり、これは「C:\ Windows \ Fonts」にmklink(/ D)されていましたが、同じ問題が発生しました。私の場合
cd "C:\ Users \ User Name \ OneDrive"
rd / sフォント
Y(アクションを確認するため)
助けて頂きました。それがあなたにも役立つことを願っています; D
私の場合、フォルダをルートディレクトリに移動しました。
move <source directory> c:\
次に、コマンドを実行してディレクトリを削除しました
rmdir c:\<moved directory> /s /q
rmdir c:\<moved directory> /s /q
正解です
Windowsは「設計上壊れている」場合があるため、空のフォルダを作成してから、バックアップモードで「壊れたフォルダ」を「空のフォルダ」とミラーリングする必要があります。
robocopy - cmd copy utility
/copyall - copies everything
/mir deletes item if there is no such item in source a.k.a mirrors source with
destination
/b works around premissions shenanigans
次のように空のディレクトリを作成します。
mkdir empty
壊れたフォルダを次のように空で上書きします。
robocopy /copyall /mir /b empty broken
その後、そのフォルダを削除します
rd broken /s
rd empty /s
これで問題が解決しない場合は、Shiftキーを押しながら再起動をクリックし、これらのコマンドをリカバリモードで再度実行して、「コマンドプロンプト付きのリカバリモード」で再起動してみてください。
/W:0
不必要な遅延を避けるために指定することをお勧めします。/b
管理者権限が必要なため、必要ない場合があります。リカバリモードはこの質問には関係ありません。これは、誰かが手動でディレクトリを削除しようとしているのではなく、バッチスクリプトについて話しているためです。
私は次の考えられる原因を考えることができます:
1.)については、試すことができます runas /user:Administrator
、より高い権限を取得するか、コンテキストメニューから管理者としてバッチファイルを開始するためにます。それでも問題が解決しない場合は、管理者でさえ権限を持っていない可能性があります。次に、ディレクトリの所有権を引き継ぐ必要があります。
2.)Process Explorerをダウンロードし、をクリックFind/Find handle or DLL...
またはを押してCtrl+F、ディレクトリの名前を入力し、誰がそれを使用しているかを調べます。可能であれば、ディレクトリを使用するアプリケーションを閉じます。