Windows 批处理文件删除和重新复制文件的速度太快了 - 应该需要 15 秒以上,但实际用时不到 1 秒。为什么?

Windows 批处理文件删除和重新复制文件的速度太快了 - 应该需要 15 秒以上,但实际用时不到 1 秒。为什么?

我编写了一个脚本,检查文件夹是否存在,如果存在,则清空它。然后等待 5 秒钟,然后继续将新的(或可能是相同的)文件重新复制回该文件夹。

当文件夹尚不存在时,复制文件需要 15-20 秒。但是当文件夹已存在时,我可以看到它们被清空,我看到它等待,然后我看到它在不到 1 秒的时间内快速完成复制命令。文件显示在列表中。

有人能给我解释一下吗?看起来复制实际上是在查看文件是否存在,如果存在,并且两者以某种方式相同,则它只会恢复文件而不是重新复制它。

我还没有测试过“恢复”理论,但想知道这是否可能(无论哪种方式都很可怕)。

我增加了 5 秒钟的暂停,认为驱动器可能需要时间来稳定下来。

提前致谢。

脚本示例:

@echo 关闭

if exist c:\some\folder erase /q c:\some\folder
erase /q C:\another\folder\file*.exe
ping -n 6 -w 1000 127.0.0.1 > nul

copy /y some\folder\sample.exe c:\some\folder\sample.exe
copy /y another\folder\file001.exe c:\some\folder\file001.exe

让你的测试文件变大,这样它们就需要时间来复制,你就会明白我的意思。

答案1

听起来你正在目睹文件系统缓存正在发挥作用。

首先,当您复制文件时,计算机必须先将该文件读入内存,然后才能将其写回副本。读取该文件需要花费时间,因此内存中的副本会保留在缓存中,以备您再次需要。例如,如果您打开刚刚复制的文件,或者将其复制到其他地方。操作系统不必浪费时间再次从磁盘读取它。

其次,这完全是谎言。当文件被“写入”时,它实际上并没有进入磁盘。而是进入内存缓冲区,然后在稍后的某个时间提交到磁盘(通常是立即提交,但不一定提交 - 这取决于磁盘的繁忙程度)。无论哪种方式,操作系统都会报告文件已完成复制,但实际上并没有完成。

读取缓存和写入缓冲都是所有现代操作系统使用的优化技术。就您而言(假设没有出错,文件完全相同),您的脚本正处于最佳状态。文件只是从一个缓存块复制到另一个缓冲块,因此它不会花费很长时间。

顺便说一句...这就是为什么你永远不应该在未正确关闭计算机的情况下关闭计算机,也不应该在未卸载闪存驱动器的情况下移除闪存驱动器。该过程的一部分是将写入缓存提交到磁盘。

相关内容