Batch file beep bat文件循环检查参数工作不正常

Batch file beep bat文件循环检查参数工作不正常,batch-file,cmd,beep,Batch File,Cmd,Beep,我编写了一个beep文件,但无法正常工作: @echo off if "%1"=="" ( (echo.) ) ELSE ( if "%1"=="/?" ( echo BEEP [/? | LOOP [TIMES]] echo THIS COMMAND IS USED TO BEEP. ) ELSE ( set number2=%2 if "%1"=="loop" ( for /l %%i in (1,1,%number2%) do (echo.) set number2= ) ELSE ( e

我编写了一个beep文件,但无法正常工作:

@echo off
if "%1"=="" (
(echo.)
) ELSE (
if "%1"=="/?" (
echo BEEP [/? | LOOP [TIMES]]
echo THIS COMMAND IS USED TO BEEP.
) ELSE (
set number2=%2
if "%1"=="loop" (
for /l %%i in (1,1,%number2%) do (echo.)
set number2=
) ELSE (
echo INPUT "BEEP /?" TO SEE HELP.
)
)
)
下面是一些应该有效但不起作用的例子:

beep.bat loop 2
应该响两次

beep.bat /?
机器运转正常

问题出在
beep.bat循环[否]
部分。
它不能工作,也没有输出

任何帮助都将不胜感激。

回音太快了

添加超时并直接使用输入参数%2:

for /l %%i in (1,1,%2) do (
    echo.
    timeout /t 1 /nobreak > NUL
)

我会这样做的。如果他们键入
/?
-h
,它仍将打印帮助,并且仅在给出两个参数时才会循环

如果未给出任何参数,则它将回显一次

您还可以添加例程以确保%2是实数

echo off
if "%~1"=="" (echo.&goto :EOF)
if "%~2"=="" (
   echo BEEP LOOP [TIMES]
   echo THIS COMMAND IS USED TO BEEP THE SPEAKER (if it has one)
   echo.
   pause
   goto :EOF
)

for /l %%i in (1,1,%2) do (echo.)
您的问题是扩展延迟。在代码块开始执行之前,代码块(括号内的代码)内的所有变量读取都将替换为变量中的值。如果在块内更改了变量,则无法检索该新值,因为对变量的所有读取都被替换为值。要解决此问题,请启用延迟扩展,并在需要延迟读取的变量中,使用
%var%
sintax更改为
!瓦尔指示解析器将读取延迟到执行时。


您应该能够轻松地解释这一点。

如果您只是在没有参数的情况下启动批处理文件,是否会听到一声蜂鸣声?是的。我只听到一声嘟嘟声。我可以用
ping 192.168.0.1-n1-w 100>nul
来代替吗?很抱歉,转换为exe后,这不起作用,但其他的可以很好地工作。这是我的错,不是你的错。
@echo off
    setlocal enabledelayedexpansion

    if "%~1"=="" (
        echo(
    ) else if "%~1"=="/?" (
        echo BEEP [/? | LOOP [TIMES]]
        echo THIS COMMAND IS USED TO BEEP.
    ) else if /i "%~1"=="loop" (
        set /a "number2=%~2"
        for /l %%i in (1,1,!number2!) do echo(
    ) else (
        echo INPUT "BEEP /?" TO SEE HELP.
    )
@echo off

REM loopNum defaults to 1, caps at 10.

SET loopNum=1
If not "%~1"=="" (
    SET loopNum=%1
)

FOR /L %%i IN (1,1,10) DO (
  @echo 
  IF %%i GEQ %loopNum% GOTO :scriptEOF
)

:scriptEOF