批量移动文件会损坏 Windows PE 中 运行 上的目录

Moving files in batch corrupts directories on running in Windows PE

在工业 PC 上有一个恢复分区 运行 Windows PE。在这个 WPE 环境中,有一些批处理脚本 运行 可以为用户提供一些选择。例如。 "Press 1 for this, press 2 for that"等

我目前正在进行一项操作,包括将文件移动和删除到外部驱动器。使用以下命令我可以移动和删除文件:

::Create a new folder on the external drive
if not exist "F:\Backup\TemporaryFiles\" mkdir F:\Backup\TemporaryFiles

::Move log files
move /y "%dataVolume%\system\LogFile\*.log" "F:\Backup\TemporaryFiles\"
move /y "%dataVolume%\system\LogFile\*.gz" "F:\Backup\TemporaryFiles\"

::Delete PNG files
del "%dataVolume%\system\LogImg\*.png" /f/q

:: Reboot safely
wpeutil reboot

但是,重新启动从中移动文件的源目录以及外部驱动器上的目标目录已损坏。使用chkdsk可以恢复,当然不是稳定状态

根据this question on Super Userwpeutil reboot可用于安全重启电脑并将所有数据刷新到磁盘。我希望这足以避免损坏的目录,但似乎索引在移动 and/or 删除操作后被破坏,因为 chkdsk /f 告诉我损坏的索引已恢复。

move 命令不是运行 同步吗?

即批处理是否不等到 move 完成才执行下一个命令?

如何确保我的索引在移动和删除文件时不被破坏?

由于 move 正在同步工作并且 wpeutil reboot 应该将所有缓冲区刷新到磁盘,所以我应该对我正在做的事情感到满意。但是,我决定通过使用 sync 并等待它 return:

来确保所有缓冲区实际上都已刷新到磁盘(即 USB 驱动器)
move /y "\TmpLogFile\*.gz" "%%d\Backup\TemporaryFiles\"
START /WAIT cmd /c "sync.exe" "-r -e %%d"
wpeutil reboot

%%d 持有分配给 USB 驱动器的盘符。