Windows 7 为什么mkdir偶尔会拒绝访问?

Windows 7 为什么mkdir偶尔会拒绝访问?,windows-7,cmd,Windows 7,Cmd,我有BAT脚本,这些脚本并不复杂,在XP上运行良好。但在Win7上,在rmdir之后执行mkdir的5次执行中,约有1次神秘访问被拒绝。例如 S:\TLIB importing\! Curtains\2 To process>rmdir temp3allout /s /q S:\TLIB importing\! Curtains\2 To process>mkdir temp3allout Access is denied. 在这之后,当我尝试在资源管理器,它没有问题,使该目录。

我有BAT脚本,这些脚本并不复杂,在XP上运行良好。但在Win7上,在rmdir之后执行mkdir的5次执行中,约有1次神秘访问被拒绝。例如

S:\TLIB importing\! Curtains\2 To process>rmdir temp3allout /s /q

S:\TLIB importing\! Curtains\2 To process>mkdir temp3allout
Access is denied.
在这之后,当我尝试在资源管理器,它没有问题,使该目录。再次击球通常会成功

知道这是怎么回事吗


Win XP光盘是一个常规2Gb驱动器。Win 7 disc是一个2Gb Intel RST RAID1阵列,已禁用缓存和刷新功能。

当文件系统尚未完成删除目录时,会发生这种情况

有时这将同步发生,即在rmdir命令完成之前,但有时会有非常短但非零的延迟。(在XP中,它始终是同步的,IIRC。)

如果可能,避免删除并立即重新创建目录;如果无法避免,则需要检测故障并重试


您可能还应该测试并在必要时重试rmdir;有时,rmdir也会遇到同样的问题,无法删除整个目录树。

因为该目录中的目录或文件在某个编辑器中处于打开状态,所以首先必须从编辑器中关闭该文件/目录,然后重试


这些错误通常发生在我们创建一些目录,然后将其删除时,但它被部分删除,并且我们创建了同名的新目录。

文件系统尚未完成删除该目录。有时这会同步发生,即在
rmdir
命令完成之前,但有时会有很短但非零的延迟。(在XP中总是同步的,IIRC。)如果可能,避免删除并立即重新创建目录;如果你无法避免,你就需要检测失败并重试。@Harry,听到操作系统发生如此重大的变化,我真的很惊讶,但这确实符合我的观察结果。谢谢请将其作为答案输入,以便我可以接受。当最后一个句柄关闭时,删除操作完成。这一点没有改变。通常,是杀毒软件打开目录并阻止删除的完成。@RaymondChen:我知道内核层总是这样,但在我看来,
DeleteFile
总是等待删除完成后再返回。我从来没有在XP或更早的版本中遇到过这个问题,我也不知道Vista之前的其他人有任何报告。OTOH,我想这可能是因为Vista强制改变了杀毒软件的工作方式,而不是因为对DeleteFile函数本身做了任何更改。@RaymondChen,我看不到阻止完成。如果我延迟完成,那这本身就不是问题。但如果rmdir未能等待完成,那么这就是一个问题。rmdir被定义为删除目录,而不是计划在将来的某个时间删除。我不完全确定这是真的,从procmon日志中可以看出,Windows Defender和Windows Search Indexer/change journal会在删除之前尝试访问它,导致它被锁定。@paulm,是的,这就是造成延迟的典型原因。但是延迟以这种方式影响脚本的唯一原因是rmdir是异步的。(如果它是同步的,您可能会认为它无论如何都会失败,因为目录被锁定,但这只会发生在后台进程中,并且无论如何都会导致不同的失败模式。)