[請問] 批次檔的延遲變數
我利用call :label的方式寫了一個河內塔的遞迴函式
第一個版本是ok的
================第一個版本===========================
@echo off
set return=
set /p n=請輸入河內塔n的數目:
call :sub1 %n%
echo 要移動%return%次
pause
goto :eof
REM //==================
REM // 河內塔1
REM //==================
:sub1
if "%1"=="1" (
set return=1
goto :eof
)
set /a temp=%1-1
call :sub1 %temp%
set /a return=1+2*return
goto :eof
==================================================
後來改寫河內塔的函式,但是這個好像有延遲變數的問題
在set /a AAA=%1-1 這行得到的AAA是空字串(見紅色的部分)
我想請問為什這裡得到的會是空字串(輸出AAA=)?
REM //==================
REM // 河內塔2
REM //==================
:sub2
if "%1"=="1" (
set return=1
) ELSE (
set /a AAA=%1-1
echo AAA=%AAA%
call :sub2 %AAA%
set /a return=1+2*return
)
goto :eof
因為二版有遲延變數的問題,所以打開遲延變數
但是這個版本在執行到紅色這行之後,
會出現missing operand的錯誤訊息,return的值會
變成空的,不知道有沒有人可以說明一下這個錯誤
發生的原因。
REM //==================
REM // 河內塔3
REM //==================
:sub2
setlocal enabledelayedexpansion
if "%1"=="1" (
set return=1
) ELSE (
set /a AAA=%1-1
call :sub2 !AAA!
set /a return=1+2*!return!
)
endlocal
goto :eof
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.121.130.84
→
08/12 01:34, , 1F
08/12 01:34, 1F
→
08/12 02:00, , 2F
08/12 02:00, 2F
→
08/12 02:00, , 3F
08/12 02:00, 3F
→
08/12 02:01, , 4F
08/12 02:01, 4F
→
08/12 02:02, , 5F
08/12 02:02, 5F
EZsoft 近期熱門文章
PTT數位生活區 即時熱門文章
12
39