此代码回显字符和字符的每个行号 但不完全正确。尝试修复。主要是变量计数 必须留下而不是%% m。请给我解释一下电话!!!
如何使最后一行显示输入词的最后一个字符。
@ECHO OFF
:input
set /p word=input your word:
if not defined word goto input
(ECHO %word%)> tempfile.txt
FOR %%x IN (tempfile.txt) DO ( SET /A lenght=%%~zx - 2 )
del tempfile.txt
echo %word% got %lenght% characters
setlocal enabledelayedexpansion
for /l %%m in (1,1,!lenght!) do (
set /a count=0
set /a count=count+%%m
call echo !count! %%word:~!count!,1%%
)
endlocal
pause
所以,这是输出:
input your word:qwertzuio
qwertzuio got 9 characters
1 w
2 e
3 r
4 t
5 z
6 u
7 i
8 o
9
Press any key to continue...
答案 0 :(得分:1)
当您回显字符时,您使用!count!
作为索引,但count
从1开始,而您需要从0开始索引。
试试这个:
for /l %%m in (1,1,!lenght!) do (
set /a count=%%m
set /a index=%%m-1
call echo !count! %%word:~!index!,1%%
)
我将index
设置为%%m-1
,使其从0开始,但将count
保留为1。 (我也摆脱了没有用处的额外set /a count=0
。)
以下是示例输出:
input your word:foo
foo got 3 characters
1 f
2 o
3 o
Press any key to continue . . .
答案 1 :(得分:0)
此代码部分:
for /l %%m in (1,1,!lenght!) do (
set /a count=0
set /a count=count+%%m
call echo !count! %%word:~!count!,1%%
)
是胡说八道。对于每个迭代,首先将count设置为零,然后将%% m添加到它;最终结果是计数总是等于%% m。如果消除计数并使用%% m,则可以获得完全相同的结果:
for /l %%m in (1,1,!lenght!) do (
echo %%m !word:~%%m,1!
)
另一方面,字符串位置从0开始,而不是1,因此您需要调整索引,如Nate之前所说。但是,为了直接使用FOR变量进行子字符串提取并避免使用额外的CALL命令,以这种方式修改FOR限制很方便:
set /A lenMinus1=lenght-1
for /l %%m in (0,1,%lenMinus1%) do (
set /a position=%%m+1
echo !position! !word:~%%m,1!
)
安东尼奥