batch-file - 批处理 : Errorlevels not working in some situations

标签 batch-file robocopy errorlevel

首先让我解释一下我想要实现的目标:我有一台 GoPro 相机,当录制多个延时摄影时,您最终会得到一大堆 img 文件,两个延时摄影除以文件名中的数字。 Gxxxyyyy 是文件的标签方式,y 代表图片属于哪个延时拍摄,x 代表延时拍摄中的哪张图片。

我正在尝试创建一个程序,将每个延时摄影放入不同的文件夹中(按 x 位置上的数字排序);我使用批处理是因为我已经有一些经验了。

这是我写的程序:

@echo off
set loop=0
set fn=1
set session=1

:sort
if %loop% LSS 1000 (

if %fn% GTR 99 (

    ROBOCOPY D:\Bureaublad\Output\Pictures D:\Bureaublad\Output\Pictures\Session%session% G%fn%*.JPG
    if %ERRORLEVEL% EQU 1 set /A session=%session%+1
)
if %fn% LSS 10 (

    ROBOCOPY D:\Bureaublad\Output\Pictures D:\Bureaublad\Output\Pictures\Session%session% G00%fn%*.JPG
    if %ERRORLEVEL% EQU 1 set /A session=%session%+1        
) ELSE (

    if %fn% LSS 100 (
ROBOCOPY D:\Bureaublad\Output\Pictures D:\Bureaublad\Output\Pictures\Session%session% G0%fn%*.JPG
    if %ERRORLEVEL% EQU 1 set /A session=%session%+1
    )
)

set /A fn=%fn%+1
set /A loop=%loop%+1
goto sort
)

我试图使用错误级别值来确定复制是否成功,因为如果是下一个副本,则必须复制到另一个文件夹,这就是我使用 session 变量的目的。但它总是将所有内容复制到“session1”文件夹中,而不是复制到单独的文件夹中,即使我在 x 位置上有不同编号的文件。

我尝试找出问题所在,并在 robocopy 命令之后使用“echo %ERRORLEVEL%”,然后暂停,每次它都只显示 0,即使文件已复制。

这就是问题所在,我不明白为什么错误值没有改变。

最佳答案

问题是您尝试在 block 内扩展错误级别。

百分比扩展由解析器在解析 block 时、执行 block 之前完成。

您应该将扩展更改为延迟扩展。

@echo off
setlocal EnableDelayedExpansion
set loop=0
set fn=1
set session=1

:sort
if %loop% LSS 1000 (

    if !fn! GTR 99 (
        ROBOCOPY D:\Bureaublad\Output\Pictures D:\Bureaublad\Output\Pictures\Session!session! G!fn!*.JPG
        if !ERRORLEVEL! EQU 1 set /A session=session+1
    )
....
)

关于batch-file - 批处理 : Errorlevels not working in some situations,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28306027/

相关文章:

windows - 在 Windows 批处理编程中使用循环移动文件

performance - 通过 Powershell 查找给定文件的完整路径的最快方法?

windows - Powershell 是否忘记为解析器错误设置 ERRORLEVEL?

windows - 显示来自 Windows 批处理文件的弹出窗口/消息框

windows - "Open With"使用CMD

batch-file - Robocopy 无效参数 #3

powershell - 具有Mir参数的Robocopy最大量距

windows - “RD”命令在成功或失败时不返回 '0' 或 '1' 作为错误级别

batch-file - Windows 上的 GitLab runner 和处理 & %ERRORLEVEL%

windows - 在 CMD 搜索中排除 Windows 文件夹