Я пытаюсь распечатать отформатированную строку, для которой мне нужно найти длину строки. Я просмотрел различные методы на этом сайте, но ни один из них, похоже, не работает, когда вызывается для работы в al oop.
Я пытаюсь настроить код Элиаса Бачалани, который распечатывает все сохраненные Windows Wifi пароли. Данный раздел приведен ниже.
call :get-profiles r
:: For each profile, try to get the password
:main-next-profile
for /f "tokens=1* delims=," %%a in ("%r%") do (
call :get-profile-key "%%a" key
echo WiFi: [%%a] Password: [!key!]
set r=%%b
)
if "%r%" NEQ "" goto main-next-profile
pause
Я подумал, что это будет так же просто, как добавить внутренний l oop для подсчета количества символов в переменной %% a:
call :get-profiles r
REM For each profile, try to get the password
:main-next-profile
for /f "tokens=1* delims=," %%a in ("%r%") do (
call :get-profile-key "%%a" key
echo WiFi: %%a Password: !key!
set len=0
set wifiname=%%a
:getlen
call set substring=%%wifiname:~%len%,1%%
set /a len+=1
echo Len:!len! A:%%a WFN:!wifiname! SS:!substring!
if "!substring!" NEQ "" goto getlen
pause
set r=%%b
)
if "%r%" NEQ "" goto main-next-profile
pause
Используя приведенный выше код, я получаю вывод, как показано:
WiFi: NOC-Guest Password:xyz
Len:1 A:NOC-Guest WFN:NOC-Guest SS:N
Len:2 A:%a WFN:NOC-Guest SS:O
Len:3 A:%a WFN:NOC-Guest SS:C
Len:4 A:%a WFN:NOC-Guest SS:-
Len:5 A:%a WFN:NOC-Guest SS:G
Len:6 A:%a WFN:NOC-Guest SS:u
Len:7 A:%a WFN:NOC-Guest SS:e
Len:8 A:%a WFN:NOC-Guest SS:s
Len:9 A:%a WFN:NOC-Guest SS:t
Len:10 A:%a WFN:NOC-Guest SS:
Press any key to continue . . .
WiFi: %b Password:
Len:1 A:%b WFN:%b SS:
Press any key to continue . . .
Press any key to continue . . .
Похоже, переменная %% a заполняется правильно на первой итерации этой internal l oop, но затем теряет свой путь на второй итерации. Если я выполню код без внутреннего l oop (и только команды echo WiFi: %%a Password: !key!
), список Wi-Fi будет напечатан отлично.
Что я делаю неправильно? Я в некоторой степени осведомлен о enabledelayedexpansion
, но это больше похоже на проблему непостоянных переменных в подпрограммах.
Доступен полный оригинальный код здесь