2014-02-09 3 views
0

Я написал файл звуковой сигнал и он не может работать должным образом:звуковой сигнал летучей мыши файл параметров проверки контура не работает должным образом

@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 loop [no] часть.
Не может работать, и нет выхода.

ЛЮБАЯ ПОМОЩЬ будет оценена по достоинству.

+0

Вы слышите ОДИН сигнал, если вы просто запускаете командный файл без аргументов? – manuell

+0

да. я слышу ровно один звуковой сигнал. – Jamie

ответ

1
@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. 
    ) 

Ваша проблема была отсрочена расширение. Все переменные, читаемые внутри блока кода (код внутри скобки), заменяются значением в переменной до, когда блок начинает выполняться. Если переменная изменена внутри блока, это новое значение не может быть восстановлено, так как все считанные переменные заменяются значениями. Чтобы решить, включите замедленное расширение и в переменных, где требуется отсроченное чтение, измените значение %var% sintax на !var!, чтобы указать синтаксическому анализатору, чтобы отложить чтение до момента выполнения.

0

Эхо слишком быстро.

Добавить тайм-аут и использовать входной параметр% 2 непосредственно:

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

могу ли я использовать 'ping 192.168.0.1 -n 1 -w 100> nul' вместо? – Jamie

+0

извините, это не работает после преобразования в exe, но другие работают отлично. это моя вина, а не твоя. – Jamie

0

Это, как я хотел бы сделать это. Если они напечатают /? или -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.) 
0

A simple beep loop script

@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 

Вы должны быть в состоянии интерпретировать это легко.