批量获取(TEXT)的字母(X)
get letter (X) of (TEXT) in batch
我正在批量制作密码掩码,但我需要获取某个变量的特定字母才能使其工作。我是 运行 Windows 7. 这是我的代码:
@echo off
title Password
set Pass=
set Letters=abcdefghijklmnopqrstuvwxyz
:Loop
cls
echo.
echo Password: %Pass%
choice /c:%Letters% /n
for /l %%a in (1,1,26) do if %errorlevel%==%%a set Pass=%Pass% (Letter %%a of %Letters%)
goto Loop
@ECHO OFF
SETLOCAL
REM title Password
set Pass=
set Letters=#abcdefghijklmnopqrstuvwxyz0
:Loop
cls
echo.
echo Password: %Pass%
choice /c:%Letters:~1% /n
IF ERRORLEVEL 27 GOTO :EOF
for /l %%a in (1,1,26) do if %errorlevel%==%%a CALL set Pass=%Pass% %%Letters:~%%a,1%%
goto Loop
GOTO :EOF
这是批量操作方法。
方法的核心是CALL set Pass=%Pass% %%Letters:~%%a,1%%
这是一个解析技巧。 call
的参数被解析为
- 设置
- Pass=originalvalueofpassSpace
- %字母:~发现匹配时的值,1%
因此,按 c
将使 errorlevel
,因此匹配时 %%a
= 3,因此 %letters:~%%a,1%
将是 %letters:~3,1%
使用批量子字符串化。 %letters:~3,1%
表示取letters
的子串,从位置3开始取1个字符。
子字符串语法为
%var:~start,length% if start >=0 and length >0
%var:~start,endpos% if start >=0 and endpos <0
%var:~start,length% if start <0 and length >0
%var:~start,endpos% if start <0 and endpos <0
- length/endpos 可以省略。如果省略,则子串为 "from the start position to the end"
%
对于 delayedexpansion
模式 可能是 !
但这就是困难所在:此子字符串方法从 0
开始计数,我们有 errorlevel
字母 c
= 3
。使用子串,a=0,b=1,c=2,...
所以我们通过在letters
的开头添加一个额外的字符来作弊。使用这个额外的字符,%letters:~3,1%
生成的字母是所需的 c
。我选择了 #
- 但任何角色都可以。
然后我们使用从 1
位置开始的 letters
的子字符串(这是您使用的原始子字符串)恢复 choice
的 errorlevel
输出。 =41=]
最后一点改动是我在末尾添加了一个额外的字符。我选择 0
并用作 exit
字符。
输入 0
时,错误级别将为 27
,因此我们明确检查该值。如果输入 0
,则退出程序(当然可以是任何标签),否则,它必须是 1..26 所以去检查字母表。
我正在批量制作密码掩码,但我需要获取某个变量的特定字母才能使其工作。我是 运行 Windows 7. 这是我的代码:
@echo off
title Password
set Pass=
set Letters=abcdefghijklmnopqrstuvwxyz
:Loop
cls
echo.
echo Password: %Pass%
choice /c:%Letters% /n
for /l %%a in (1,1,26) do if %errorlevel%==%%a set Pass=%Pass% (Letter %%a of %Letters%)
goto Loop
@ECHO OFF
SETLOCAL
REM title Password
set Pass=
set Letters=#abcdefghijklmnopqrstuvwxyz0
:Loop
cls
echo.
echo Password: %Pass%
choice /c:%Letters:~1% /n
IF ERRORLEVEL 27 GOTO :EOF
for /l %%a in (1,1,26) do if %errorlevel%==%%a CALL set Pass=%Pass% %%Letters:~%%a,1%%
goto Loop
GOTO :EOF
这是批量操作方法。
方法的核心是CALL set Pass=%Pass% %%Letters:~%%a,1%%
这是一个解析技巧。 call
的参数被解析为
- 设置
- Pass=originalvalueofpassSpace
- %字母:~发现匹配时的值,1%
因此,按 c
将使 errorlevel
,因此匹配时 %%a
= 3,因此 %letters:~%%a,1%
将是 %letters:~3,1%
使用批量子字符串化。 %letters:~3,1%
表示取letters
的子串,从位置3开始取1个字符。
子字符串语法为
%var:~start,length% if start >=0 and length >0
%var:~start,endpos% if start >=0 and endpos <0
%var:~start,length% if start <0 and length >0
%var:~start,endpos% if start <0 and endpos <0
- length/endpos 可以省略。如果省略,则子串为 "from the start position to the end"
%
对于delayedexpansion
模式 可能是
!
但这就是困难所在:此子字符串方法从 0
开始计数,我们有 errorlevel
字母 c
= 3
。使用子串,a=0,b=1,c=2,...
所以我们通过在letters
的开头添加一个额外的字符来作弊。使用这个额外的字符,%letters:~3,1%
生成的字母是所需的 c
。我选择了 #
- 但任何角色都可以。
然后我们使用从 1
位置开始的 letters
的子字符串(这是您使用的原始子字符串)恢复 choice
的 errorlevel
输出。 =41=]
最后一点改动是我在末尾添加了一个额外的字符。我选择 0
并用作 exit
字符。
输入 0
时,错误级别将为 27
,因此我们明确检查该值。如果输入 0
,则退出程序(当然可以是任何标签),否则,它必须是 1..26 所以去检查字母表。