簡體   English   中英

使用 Windows 批處理腳本在 FOR 循環中計數

[英]Counting in a FOR loop using Windows Batch script

誰能解釋一下? 我可以使用 Windows 命令提示符循環計數,使用以下方法:

SET /A XCOUNT=0
:loop
SET /A XCOUNT+=1
echo %XCOUNT%
IF "%XCOUNT%" == "4" (
  GOTO end
) ELSE (
  GOTO loop
)
:end

但是這種方法不起作用(它為文件中的每一行打印出“1”)。 它就像變量超出范圍一樣:

SET /A COUNT=1
FOR /F "tokens=*" %%A IN (config.properties) DO (
  SET /A COUNT+=1
  ECHO %COUNT%
)

它不起作用,因為整個for循環(從for到最后的右括號,包括它們之間的命令)在遇到它時,它開始執行之前都會被評估。

換句話說,在運行循環之前, %count%被替換為它的值1

你需要的是這樣的:

setlocal enableextensions enabledelayedexpansion
set /a count = 1
for /f "tokens=*" %%a in (config.properties) do (
  set /a count += 1
  echo !count!
)
endlocal

延遲擴展使用! 而不是%會給你預期的行為。 另請參見此處


還要記住, setlocal/endlocal實際上限制了內部更改的范圍,以便它們不會泄漏。 如果你想在endlocal之后使用count ,你必須使用一個“技巧”,因為你遇到的問題是:

endlocal && set count=%count%

假設count在內部范圍內變為 7。 因為整個命令在執行之前被解釋,它實際上變成:

endlocal && set count=7

然后,當它被執行時,內部范圍被關閉,將count返回到它的原始值。 但是,由於將count設置為 7 發生在外部范圍內,因此它實際上泄漏了您需要的信息。

您可以將多個子命令串在一起以根據需要泄漏盡可能多的信息:

endlocal && set count=%count% && set something_else=%something_else%

對於 a = 1 到 100 步驟 1

Windows 中的命令行。 如果在批處理文件中運行,請使用 %%a。

    for /L %a in (1,1,100) Do echo %a 

這是一個生成所有10.xxx地址的批處理文件

@echo off

SET /A X=0
SET /A Y=0
SET /A Z=0

:loop
SET /A X+=1
echo 10.%X%.%Y%.%Z%
IF "%X%" == "256" (
 GOTO end
 ) ELSE (
 GOTO loop2
 GOTO loop
 )


:loop2
SET /A Y+=1
echo 10.%X%.%Y%.%Z%
IF "%Y%" == "256" (
  SET /A Y=0
  GOTO loop
  ) ELSE (
   GOTO loop3
   GOTO loop2
 )


:loop3

SET /A Z+=1
echo 10.%X%.%Y%.%Z%
IF "%Z%" == "255" (
  SET /A Z=0
  GOTO loop2
 ) ELSE (
   GOTO loop3
 )

:end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM