2014-02-09 46 views
0

我寫了一個蜂鳴文件,它不能正常工作:蜂鳴聲bat文件迴路校驗參數不正常

@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 

你應該能夠很容易地理解這一點。