首先让我解释一下我想要实现的目标:我有一台 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/