-1

此代码回显字符和字符的每一行号,但不完全正确。尝试修复。主要的是变量计数必须保留而不是 %%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...
4

2 回答 2

1

当您回显字符时,您将其!count!用作索引,但从count1 开始,而您需要从 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 开始,但从count1 开始。(我也摆脱了无用的额外set /a count=0内容。)

这是一个示例输出:

input your word:foo
foo got 3 characters
1 f
2 o
3 o
Press any key to continue . . .
于 2013-04-05T13:34:02.680 回答
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!
)

安东尼奥

于 2013-04-05T14:35:16.890 回答