批处理脚本为我修复

时间:2013-04-05 12:41:56

标签: batch-file

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

2 个答案:

答案 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!
)

安东尼奥