Ini sering terjadi pada saya dengan skrip build otomatis saya.
Saya kira alasannya mungkin beberapa aplikasi yang memiliki file terbuka di direktori itu dengan "share delete". Yaitu aplikasi ini memungkinkan penghapusan file (itulah sebabnya saya pikir panggilan DeleteFile tidak gagal), tetapi file hanya akan hilang setelah aplikasi mengatakan telah menutup itu menangani.
Itu berarti file mungkin masih ada ketika rmdir
perintah mencoba untuk menghapus folder, maka pesan kesalahan. Segera setelah itu, aplikasi mengatakan akan menutup itu menangani, file tersebut akan hilang, dan ketika Anda memeriksa folder untuk melihat file yang rmdir
sedang dibicarakan itu akan kosong.
Setidaknya itu teoriku.
Solusi yang diusulkan oleh Harry Johnston terlihat bagus. Hanya saya yang akan menyisipkan jeda di antara rmdir
perintah. Tentu saja Windows tidak memiliki perintah "pause" yang dapat skrip (koreksi: versi Windows kuno tidak, yang lebih baru - lihat komentar). Tetapi jika granularity detik sudah cukup, seseorang dapat menggunakan ping
untuk membuat jeda:
ping -n {desired_delay_in_seconds + 1} 127.0.0.1 >nul
Jadi totalnya:
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}