Batch file beep bat文件循环检查参数工作不正常
我编写了一个beep文件,但无法正常工作: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
@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