2015-10-08 67 views
0

为什么这不起作用?如何比较批处理文件中的数值变量

SET FIRST="" 
SET COUNT=0 
FOR %%F IN (dir *.png) DO (
    IF %COUNT% NEQ 0 GOTO _skip 
    SET FIRST=%%F 
:_skip 
    ECHO "%%F", 
    SET /A COUNT=COUNT+1 
) 

它设置FIRST最后*.png因为IF条件失败,因为COUNT - 虽然是由set /A增加后,IF %COUNT%不会永远工作。非常令人沮丧。

+1

1.你不是真的在使用** DOS **,你('set/A'当时不支持!)? 2.当您在'for'循环中修改并读取'COUNT'时,您需要[延迟变量扩展](http://stackoverflow.com/a/10558905/5047996) 3.不要在'for'这样的代码块中使用'goto',因为它们会破坏块上下文; – aschipfl

+0

一般来说,如果你描述了什么“不工作”意味着什么以及你期望你的代码做什么,这将是非常有用的... – aschipfl

回答

1

不需要计数,只需在回波线后执行goto skip即可。

@echo off 
for /f "delims=" %%f in ('dir /b *.png') do (
    rem :: you can use "echo %%f" instead of "set first=%%f" 
    set first=%%f 
    goto _skip 
) 
:_skip 
echo %first% 

你混合两件事扫描文​​件夹。

这里是第二种方式:

@echo off 
for %%f in (*.png) do (
    set first=%%f 
    goto _skip 
) 
:_skip 
echo %first% 
exit /b 0 

如果需要绝对计数,这里是计数跳过了道路。正如评论所述,你需要启用

@echo off 

set count=1 
for %%f in (*.png) do (
    set first=%%f 
    setlocal enabledelayedexpansion 
    if "!count!"=="1" goto _skip 
    endlocal 
    set /a count+=1 
) 
:_skip 
echo !first! 
+0

为什么你把'setlocal'放在'for'主体中?为什么不在'for'之前说一次呢? – aschipfl

+1

@aschipfl因为带有“!”的文件名我把扩展放在需要的地方。我不记得哪个帖子解释了这个 – Paul

+0

好吧,好点!然而,您需要'endlocal',然后在* set/a之前*禁用下一个'for'循环迭代的延迟扩展... – aschipfl