iT邦幫忙

1

如何用在CMD下獲取變數內容長度?

  • 分享至 

  • xImage

我想計算變數的字數
假設變數是abc
內容是12345678
我要檢查是不是9個字
我想到三個辦法

set abc=123456789
setlocal EnableDelayedExpansion
for /l %%i in (0,1,100) do (
set Length=%%i
if "%abc%"=="!abc:~0,%%i!" goto done
)
:done
if "%Length%"=="9" echo Check Pass
pause
set abc=123456789
set chk=0
if not "%abc:~0,9%"=="%abc:~0,10%" set chk /a abc+=1
if "%abc:~0,8%"=="%abc:~0,9%" set chk /a abc+=1
if "%chk%"=="2" echo Check Pass
pause
set abc=123456789
set Length=0
:loop
if "%abc%"=="" goto end
set /a Length+=1
set abc=%abc:~1%
goto loop
:end
if "%Length%"=="9" echo Check Pass
pause

能正常運作 但是我想再精簡一點
於是我去找powershell的語法
從網路上查到兩行指令
一行是"123456789".length
這一行在CMD下用powershell "123456789".length去執行會被吃掉雙引號導致錯誤

另一行是$str = "123456789"; $str.Length
這一行在CMD下用powershell $str = "123456789"; $str.Length去執行結果永遠都是1
請問各位大佬該如何讓這兩行powershell指令在CMD正常執行?
或是有什麼更好更精簡的方式獲取字串長度?

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1
nwm310
iT邦新手 3 級 ‧ 2021-08-12 19:59:06
最佳解答

用單引號、雙引號

powershell "'123456789'.length"
powershell "$str = '123456789'; $str.Length"
pause

只用雙引號

powershell "\"123456789\".length"
powershell "$str = \"123456789\"; $str.Length"
pause

bat

::0 ~ 255字
setlocal enableDelayedExpansion

set s=123456789

set a=□0□1□2□3□4□5□6□7□8□9□A□B□C□D□E□F
set "$=!%a:□=!!a:□=%!!s!!s!"
set /a len=0x!$:~-512,2!

echo %len%
pause
Neo_||Ø2 iT邦新手 5 級 ‧ 2021-08-12 23:31:54 檢舉

感謝大佬 這樣方便多了

for /f %%i in ('powershell "'123456789'.length"') do set Length=%%i

不過BAT的範例我看不懂lol
是編碼顯示的問題?
https://ithelp.ithome.com.tw/upload/images/20210812/20126087Q11Cr4KoNX.png

nwm310 iT邦新手 3 級 ‧ 2021-08-13 10:34:20 檢舉

不是編碼顯示問題

另外補充:
PowerShell 單引號字串、雙引號字串是不一樣。
要注意、以免出錯

Neo_||Ø2 iT邦新手 5 級 ‧ 2021-08-13 20:15:41 檢舉

了解 我再研究研究
感謝

我要發表回答

立即登入回答