8

我正在尝试制作一个批处理文件,每次循环时都会将变量增加 1,然后检查变量是否等于 5,如果不是,则再次循环。我知道这可能有一个 while 循环,但我不知道该怎么做,我现在只是在享受学习 Batch 的乐趣

这是代码,它没有按应有的方式工作,它只显示一个 0: 然后什么也不做。那么我将如何修复它呢?我有一种感觉,我错误地设置和增加了变量,也许它对 2 个 if 语句感到困惑?(是否有 else 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

注意:我对 Batch 了解不多,也不是专业人士,但我喜欢学习,我只是为了将来参考而这样做,因为我喜欢它。所以,这段代码可能不太好,但我想知道如何实现这一点。

4

6 回答 6

24

这是一种模拟您尝试完成的 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
于 2013-03-16T14:18:41.297 回答
7

你可以用一个简单的FOR命令来做到这一点:

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

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

于 2015-07-09T21:27:57.157 回答
4

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

/A 开关指定等号右侧的字符串是计算的数值表达式。

(键入SET /?所有帮助)。

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

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

于 2013-03-16T14:07:43.857 回答
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
于 2013-03-16T14:14:05.873 回答
0
@echo off
set a=0
:Count
set /a a=a+1
echo %a%
goto Count
于 2015-04-22T20:27:42.570 回答
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));
于 2019-04-03T15:46:08.740 回答