2015-10-08 97 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