You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让批处理等待文件复制完成后再执行图片缩放操作

修复方案

核心原理

文件被复制过程中会被系统锁定,无法执行重命名/写入操作,我们可以利用这个特性判断文件是否已经完成复制,同时增加执行结果校验避免误删源文件。

修改后的主批处理代码

@echo off
set "source_folder=c:\src"
set "result_folder_1=c:\res1"

:start
if exist "%source_folder%\*.jpg" (
    for %%a in ("%source_folder%\*.jpg") do (
        :: 检测文件是否被占用
        2>nul (
            ren "%%~fa" "%%~nxa"
            if not errorlevel 1 (
                call scale.bat -source "%%~fa" -target "%result_folder_1%\%%~nxa" -max-height 1000 -max-width 1000 -keep-ratio yes -force yes
                :: 仅缩放成功后删除源文件
                if not errorlevel 1 (
                    del "%%~fa"
                )
            )
        )
    )
)
:: 降低CPU占用
timeout /t 1 /nobreak >nul
goto start

关键修改说明

  • 文件占用校验:用ren "%%~fa" "%%~nxa"尝试将文件重命名为自身,无报错则说明文件未被占用、复制完成,跳过还在写入的文件等待下一轮检测
  • 执行结果校验:只有scale.bat正常执行完成(返回退出码0)才删除源文件,避免缩放失败时丢失原始文件
  • 循环延迟:增加1秒无操作等待,大幅降低死循环带来的CPU占用,不影响监听响应速度

可选:修复scale.bat隐藏bug

当前scale.bat中格式转换逻辑存在顺序错误,会导致跨格式转换时出现变量未定义报错,修改方法如下:
找到scale.bat末尾的这几行代码:

///
scale();
///

if (sourceFormat !== targetFormat ){
    convert(resImg,targetFormat);
}

var resImg=imageProcess.Apply(imageFile);
resImg.SaveFile(target);

调整为如下顺序即可:

///
scale();
///

var resImg=imageProcess.Apply(imageFile);
if (sourceFormat !== targetFormat ){
    convert(resImg,targetFormat);
    resImg=imageProcess.Apply(resImg);
}
resImg.SaveFile(target);

内容的提问来源于stack exchange,提问作者Andreas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 09:00:01