首先让我解释一下我想要实现的目标:我有一个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
)
我试图使用errorlevel值来确定副本是否成功,因为如果它是下一个副本必须是另一个文件夹,这是我使用的会话变量。但它总是将所有内容复制到" session1"文件夹,而不是单独的文件夹,即使我在x位置有不同数字的文件。
我试着搞清楚问题是什么并且使用了" echo%ERRORLEVEL%"然后在robocopy命令之后暂停,每次只是说0,即使文件被复制了。
这就是问题所在,我无法弄清楚为什么错误值不会发生变化。
答案 0 :(得分:2)
问题是您尝试在块内扩展errorlevel。
在执行块之前解析块时,解析器完成百分比扩展。
您应该将扩展更改为延迟扩展。
@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
)
....
)
答案 1 :(得分:1)
ERRORLEVEL
是一个内置变量,而不是环境变量,所以你不应该在它周围使用百分号(%
),而只是直接测试该值。使用它的正确方法是
IF ERRORLEVEL 1 DoSomething
答案 2 :(得分:0)