【发布时间】:2019-01-17 10:54:17
【问题描述】:
感谢任何人的帮助。我非常坚持这一点。
我正在编写一个 bat 脚本来将文件从一个文件夹移动到另一个文件夹。 (这部分很简单)
但是,在实际移动文件之前,我想检查文件的大小是否每 45 秒更改一次。如果文件的最后大小等于当前大小,则 finally 将移动它。 (此检查的原因是因为源文件夹中的文件可能仍在写入中,我们不想在它完成之前移动它)
请帮忙,我愿意接受建议
目前有这个代码,卡住了:
for %%a in (%_fromFolder%\*%_fileName%*%_extension%) DO (
echo %%~za
set "fname=%~1"
set fSize = %%~za
timeout /t 45 /nobreak
:loop
if fSize == %%~za (
echo %fSize%
echo %%~za
goto :moveF
) else (
set fSize =%%~za
timeout /t 45 /nobreak
goto :loop
)
)
:moveF
move %~1 %_toFolder%
【问题讨论】:
-
在
FOR命令块之外进行检查。只需使用FOR命令获取文件大小并将其设置为变量。然后进行检查并超时。 -
如果文件是打开写入,您将无法移动它。您可以尝试移动它并检查移动是否失败?
-
您是否将文件作为参数传递给此批处理文件?我问的唯一原因是因为这行代码:
set "fname=%~1"。如果您已经将文件名作为参数,则无需FOR命令获取大小。 -
@Squashman:感谢您的回复,但该文件夹可能有多个文件需要检查和移动。
-
@EdxTribal,你不能在
FOR命令块内执行GOTO。它破坏了FOR命令。
标签: batch-file filesize movefile