任何人都知道如果代碼像我一樣撰寫,為什么它仍然有效,以及它對程式的影響如何?
在 John Hammond 的視頻(見下面的鏈接)中,他在呼叫函式 :add_one 時將值 %x% 和 %y% 作為不同的引數傳遞給 x 和 y 字串。
但是,正如您在我的示例中看到的那樣,它最后會回傳精確的 x 1 和 y 1 的值,即使我沒有像視頻中那樣傳遞 %x% 和 %y% 的值帶有字串/字符/變數名。
請解釋我的區別,因為從他的解釋中,我明白我必須傳遞字串和值總是有一個正確的回傳,但是在我的例子中,即使我只傳遞了字串/字符/變數名我仍然得到正確的 rutrn。
我指的是來自他的頻道 https://www.youtube.com/watch?v=x-ri889-UDA&list=PL69BE3BF7D0BB69C4&index=27的視頻
接下來我舉個例子。
我的例子。
@echo off
goto :main
:add_one
setlocal
echo Running 'add_one'...
endlocal & set /a %~1=%~1 1 & set /a %~2=%~2 1
goto :eof
:main
setlocal
set /a x=1
set /a y=50
echo.
echo Created variable X and set it to %x%.
echo Created variable Y and set it to %y%.
echo.
call :add_one x y
echo.
echo The value of X is now %x%.
echo The value of Y is now %y%.
endlocal
goto :eof
我從視頻中了解到的可能是回傳傳入值的唯一正確方法。
@echo off
goto :main
:add_one
setlocal
echo Running 'add_one'...
endlocal & set /a %~1=%~2 1 & set /a %~3=%~4 1
goto :eof
:main
setlocal
set /a x=1
set /a y=50
echo.
echo Created variable X and set it to %x%.
echo Created variable Y and set it to %y%.
echo.
call :add_one x %x% y %y%
echo.
echo The value of X is now %x%.
echo The value of Y is now %y%.
endlocal
goto :eof
uj5u.com熱心網友回復:
tl; dr -set /a很奇怪,你在做數學時不需要百分號。
這是幾十年來多個不同團隊開發的批處理的副作用。當批處理第一次出現時command.com,根本沒有數學選項,你必須用其他程式做一些奇怪的事情才能讓它作業。當使用 為 Windows NT 更新語言時cmd.exe,添加了多項功能,包括/a允許使用帶符號的 32 位整數進行算術運算的標志。
無論出于何種原因,添加該/a功能的團隊決定您不需要將變數包裝在百分號中以評估運算式,因此兩者set /a var=%var% 1和set /a var=var 1都是有效的(有趣的是,也是如此set /a var =1)。
set /a與常規set陳述句的不同之處還在于空格對變數名不重要。通常,在陳述句中使用空格 likeset var = 5會導致必須參考的變數,因為%var %它的值將是 ' 5'。但是,set /a允許空格,因此set /a var = var 1仍以 1 遞增%var%。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/520298.html
標籤:批处理文件脚本返回值
上一篇:在批處理檔案中-測驗值是否小于零
