2017-07-27 86 views
0

代碼不言自明。我已經在註釋行中嘗試了相同結果的命令。最後一行是增量分配和證據enabledelayedexpansion工作的測試。該故障必須位於for循環內。批量計數器不增加

@echo off 
setlocal EnableDelayedExpansion 
set count_k=5 

for /l %%a in (1,1,5) do (
rem set a/ count_k+=1 
rem set a/ "count_k+=1" 
set a/ count_k=count_k+1 
echo This is count_k per %count_k% 
echo This is count_k exc !count_k! 
) 

echo After loop this is count_k %count_k% 

set _var=first 
set _var=second & echo %_var% !_var! 

set count = 0 
(
set /a count+=1 
echo %count% fails 
echo !count! works 
) 

這是上面的批處理文件的輸出:

This is count_k per 5 
This is count_k exc 5 
This is count_k per 5 
This is count_k exc 5 
This is count_k per 5 
This is count_k exc 5 
This is count_k per 5 
This is count_k exc 5 
This is count_k per 5 
This is count_k exc 5 
After loop this is count_k 5 
first second 
fails 
1 works 
+1

Cmd.exe儘管出現,但與DOS無關。如果您正在編寫新腳本,請不要打擾批處理。使用PowerShell。 –

+0

希望這會有所幫助:https://stackoverflow.com/questions/21697199/how-to-increment-variable-under-dos –

+3

不應該是'set/a'而不是'set a /'? – kichik

回答

0

我從來沒有在「set」命令之前看過「a /」參數。你確定它不打算成爲「/ a」,這可能會影響你的結果和你的代碼嗎?

我討厭交出魚來代替教魚,但是這與你想要做的相似嗎?

@ECHO OFF 
SET COUNT=0 
ECHO Before the loop count is: %COUNT% 

FOR /L %%A IN (1,1,5) DO (
    @ECHO Loop %%A 
    SET /A COUNT=%COUNT%+%%A 
) 

ECHO Outside the loop count is: %COUNT% 

輸出看起來是這樣的:

Before the loop count is: 0 
Loop 1 
Loop 2 
Loop 3 
Loop 4 
Loop 5 
Outside the loop count is: 5 

通過品評出@ECHO OFF,它看起來像這樣:

C:\Users\loginID>REM @ECHO OFF 

C:\Users\loginID>SET COUNT=0 

C:\Users\loginID>ECHO Before the loop count is: 0 
Before the loop count is: 0 

C:\Users\loginID>FOR /L %A IN (1 1 5) DO (

SET /A COUNT=0+%A 
) 

C:\Users\loginID>(

SET /A COUNT=0+1 
) 
Loop 1 

C:\Users\loginID>(

SET /A COUNT=0+2 
) 
Loop 2 

C:\Users\loginID>(

SET /A COUNT=0+3 
) 
Loop 3 

C:\Users\loginID>(

SET /A COUNT=0+4 
) 
Loop 4 

C:\Users\loginID>(

SET /A COUNT=0+5 
) 
Loop 5 

C:\Users\loginID>ECHO Outside the loop count is: 5 
Outside the loop count is: 5 

注意內循環,引用%無論我們在循環內重置了多少次,COUNT%始終爲0(從進入循環之前)。如果我讓內環路的變化來

SET/A + COUNT = %%一個

我的最終結果呼應%COUNT%會導致15在此之外,我不知道你想達到什麼樣的。

+0

謝謝丹尼爾,一個簡單的誦讀困難的錯誤造成了我所有的麻煩...... –

0

這適用於Windows 7控制檯窗口:

@echo off 
setlocal EnableDelayedExpansion 
set count_k=5 
for /l %%a in (1 1 5) do (
set /a count_k=!count_k!+1 
echo !count_k! 
) 

注意呼應%count_k%將輸出5,因爲%...%類似於C預處理程序,它在實際運行批處理文件之前執行字符串替換。

+1

只是好奇:爲什麼儘管有'@echo off',你會用'@'開始每一行? – Stephan

+0

@Stephan - 只是習慣,因爲你提到它並不需要。我經常剪切並粘貼批處理文件,其中一些文件沒有關閉回顯。現在已經修復了。 – rcgldr