批处理中的“计数器”

时间:2013-03-16 13:59:22

标签: batch-file

我正在尝试制作一个批处理文件,每次循环时将变量递增1,然后检查变量是否等于5,如果不是,则再次循环。我知道这可能有一段时间的循环,但我不知道该怎么做,而我现在只是喜欢学习Batch for fun

这是代码,它不应该按照它应该的方式工作,它只显示一个0:然后不执行任何其他操作。那么我该怎么做呢?我有一种感觉,我设置并将变量递增错误,也许它对2 if语句感到困惑? (如果......还有其他吗?)无论如何,谢谢你的帮助

@echo off
set /p i=0:
goto A

:A
set /p i=i+1:
if i != 5 goto C
if i == 5 goto B

:C
echo Test :D

:B
pause>nul

注意:我不知道很多批次,我不是专业人士,但我喜欢学习,我只是这样做以备将来参考,因为我喜欢它。所以,这段代码可能并不好,但我想知道如何实现这一目标。

6 个答案:

答案 0 :(得分:23)

这是一种模拟你想要完成的while循环的方法。只需要一个goto

@echo off
set /a x=0
:while
if %x% lss 5 (
  echo %x%
  pause>nul
  set /a x+=1
  goto :while
)
echo Test :D

答案 1 :(得分:4)

您可以使用简单的FOR命令执行此操作:

for /l %%x in (0,1,100) do (
echo %%x
)

您可以将100替换为您想要的数字

答案 2 :(得分:3)

要将数值设置为变量,您可以使用/a开关:

  

/ A开关指定等号右侧的字符串   是一个被评估的数值表达式。

(输入SET /?获取所有帮助。)

其次,检查你的goto流程 - 这永远不会循环回A。

第三,检查if表达式的语法(批处理中不存在!=)。

答案 3 :(得分:3)

这应该有效:

@echo off
set var1=0

:loop
    set /a var1=%var1%+1

echo %var1%

if %var1% EQU 5 (
    goto :end
) else (
    goto :loop
)

:end
    pause

答案 4 :(得分:0)

@echo off
set a=0
:Count
set /a a=a+1
echo %a%
goto Count

答案 5 :(得分:0)

尝试:

@if (@CodeSection == @Batch) @then

@echo off
:a
cls

color c
echo --------------
echo start:
echo --------------
set /p start=
cls

echo --------------
echo start: %start%
echo --------------

echo --------------
echo stop:
echo --------------
set /p stop=
cls

echo --------------
echo start: %start%
echo --------------

echo --------------
echo stop: %stop%
echo --------------
echo. 
echo. 

echo Start in:
timeout /t 2 /nobreak >nul

echo. 5
timeout /t 1 /nobreak >nul

echo. 4
timeout /t 1 /nobreak >nul

echo. 3
timeout /t 1 /nobreak >nul

echo. 2
timeout /t 1 /nobreak >nul

echo. 1
timeout /t 1 /nobreak >nul
cls

echo --------------
echo start: %start%
echo --------------

echo --------------
echo stop: %stop%
echo --------------

echo.
echo.
echo.

echo ============================================
    set SendKeys=CScript //nologo //E:JScript "%~F0"
    %SendKeys% ">----"
    %SendKeys% "{enter}"
    :while 
    echo %start%
        %SendKeys% "%start%"
    %SendKeys% "{enter}"
    set /a start=start+1
    timeout /t 1 /nobreak >nul
    if %start% leq %stop% goto :while
goto :end

:end
echo ============================================
%SendKeys% ">----"
%SendKeys% "{enter}"

:c
echo count again? Y/N
set /p return=
if %return% == Y goto :a
if %return% == N goto :b
goto :c

:b
@end

var WshShell = WScript.CreateObject("WScript.Shell");
WshShell.SendKeys(WScript.Arguments(0));