内部に他のフォルダーとファイルを含む1つのフォルダーを削除する必要があります。私が試したdel
とrmdir
コマンドが、時には彼らはいくつかのエラー行で失敗します:[PATH]: The directory isn't empty.
良い代替手段はありますか?
内部に他のフォルダーとファイルを含む1つのフォルダーを削除する必要があります。私が試したdel
とrmdir
コマンドが、時には彼らはいくつかのエラー行で失敗します:[PATH]: The directory isn't empty.
良い代替手段はありますか?
回答:
これは、自動ビルドスクリプトでよく起こります。
その理由は、そのディレクトリで「共有削除」を使用してファイルを開いているアプリケーションが原因であると思われます。つまり、アプリケーションはファイルの削除を許可します(これが、DeleteFile呼び出しが失敗しないと考える理由です)が、ファイルは、アプリケーションがそのハンドルを閉じた後にのみ消えます。
これは、rmdir
コマンドがフォルダーを削除しようとしたときにファイルがまだ存在している可能性があるため、エラーメッセージが表示されることを意味します。その後すぐに、アプリケーションがハンドルを閉じ、ファイルが消え、フォルダーを調べて、どのファイルrmdir
がそれについて話しているかを確認すると、空になります。
少なくともそれは私の理論です。
ハリー・ジョンストンが提案した回避策は良いようです。rmdir
コマンドの間に一時停止を挿入するのは私だけです。もちろん、Windowsには簡単にスクリプト化できる「一時停止」コマンドはありません(修正:古いWindowsバージョンにはありませんが、新しいバージョンにはあります-コメントを参照してください)。ただし、秒単位の粒度で十分な場合はping
、一時停止を作成するために使用できます。
ping -n {desired_delay_in_seconds + 1} 127.0.0.1 >nul
合計で:
rd /s /q foo
:: retry once
if exist foo (
:: clear errorlevel
cmd /c
:: pause
ping -n 2 127.0.0.1 >nul
:: retry
rd /s /q foo
)
:: retry yet again
if exist foo (
cmd /c
ping -n 2 127.0.0.1 >nul
rd /s /q foo
)
:: give up
if exist foo {panic}
timeout /t 3
pause
コマンドはありません)
試してください:
rmdir /S your_directory
または:
rmdir /S /Q your_directory
確認メッセージをスキップします。
del
してrmdir
、何も聞いていない、彼らはただの説明では1のようないくつかの行を送信します。
rmdir /s
削除可能なものはすべて削除されます。プログラムによってロックされているファイル、読み取り専用ファイル、または削除するために管理アクセスが必要なファイルがある場合があります。あなたのためにそれらのすべての状況を処理する単一のコマンドはありません
Windows 7(およびおそらく他のバージョン)には、この症状を引き起こすバグがあると思います。または、サードパーティソフトウェアのバグである可能性があります。(万が一Symantec Endpoint Protectionがインストールされていますか?)
とにかく、私はかなり頻繁にそれに遭遇しました。ほとんどの場合、rd /s /q
連続して2〜3回実行することで問題を回避できます。
これがバッチファイルにある場合、次のようなことができます。
rd /s /q foo
if exist foo rd /s /q foo
if exist foo rd /s /q foo
if exist foo echo Help! & pause
del
内部のファイルで使用してrmdir
から、フォルダを削除します。
rmdir
メソッドを使用してすべてのファイルも削除するには、ディレクトリ名の前に/S
スイッチを使用し、削除のプロンプトを表示しないようにします。ファイルをまったく見逃さないので、これが最善の方法です。ただし、/ Qスイッチの使用には注意してください。システムまたは隠しファイルの属性については警告しません。/Q
Windowsの古いバージョンのフォルダー(DOS、Windows 95/98 / ME)DELTREE
は、RM
またはと同等RMDIR
です。私DELTREE
はWindows 7ワークステーションでバッチファイルを使用していますが、問題ありません。
Deletes a directory and all the subdirectories and files in it.
To delete one or more files and directories:
DELTREE [/Y] [drive:]path [[drive:]path[...]]
/Y Suppresses prompting to confirm you want to delete
the subdirectory.
[drive:]path Specifies the name of the directory you want to delete.
Note: Use DELTREE cautiously. Every file and subdirectory within the
specified directory will be deleted.
次のように使用できると思います。
msg*your file is going to delete
pause
del/s /q "C:\Users\Rd\Desktop\New folder (2)\"
rmdir /s /q "C:\Users\Rd\Desktop\New folder (2)\"
mkdir "C:\Users\Rd\Desktop\New folder (2)"