首先让我解释一下我要实现的目标:我有一台GoPro相机,当记录多个延时时,你会得到一大堆img文件,两个延时被文件名中的一个数字除以。Gxxxyyyy是如何标记文件的,y代表图片属于哪个延时,x代表延时中的哪个图片。
我正在尝试创建一个程序,将每个时间推移放在不同的文件夹中(按x位置上的数字排序);我使用batch是因为我已经有了一些使用它的经验。
这是我写的程序:
@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。
这就是问题所在,我不明白为什么errorvalue不会改变。
发布于 2015-02-04 03:12:23
问题是你试图在一个块中扩展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
)
....
)发布于 2015-02-04 03:02:11
ERRORLEVEL是一个内置变量,而不是一个环境变量,因此您不应该在它周围使用百分号(%),而是直接测试该值。使用它的正确方法是简单地
IF ERRORLEVEL 1 DoSomething发布于 2018-04-12 02:54:31
https://stackoverflow.com/questions/28306027
复制相似问题