尝试创建一个批处理文件,该文件根据句子中的单词数创建一个数字字符串。
我有一个变量,其中包含不同数量的单词,例如:句子=“这是一个句子”
我需要生成的字符串是“ 1 2 3 4”,因为句子中有4个单词。
类似地,句子=“这是一个较长的句子,因为原因”将生成“ 1 2 3 4 5 6 7”
我正在尝试以下方法:
SET sentence=this is a longer sentence because reasons
SET count=
SET numbers=1
FOR %%a IN (%sentence%) DO (
SET "numbers=%numbers% %count%" & SET /A count+=1
)
ECHO Resulting number string: %numbers%
ECHO Counter: %count%
...保持将递增计数变量追加到数字末尾。因此,每次FOR循环运行时,它都会变为“ 1 2”,“ 1 2 3”,“ 1 2 3 4”等。
计数器正常工作,报告“ Counter:7” 但是该字符串仅报告“结果数字字符串:1”
它没有在末尾添加计数器...当我添加它时,它的结果是“ 1 7”而不是“ 1 2 3 4 5 6 7”
这与我是否使用setlocal EnableDelayedExpansion无关。
我在这里做什么错了?
(编辑:此问题与在字符串末尾附加一个递增数字有关。 正如我在原始问题中提到的那样,无论启用还是禁用,EnableDelayedExpansion都没有影响
答案 0 :(得分:0)
在设置变量并需要在代码块内回显时,您首先需要delayedexpansion
。另外,您不需要使用2个不同的计数器:
根据您的评论放在一行:
@echo off
setlocal enabledelayedexpansion
set "sentence=this is a longer sentence because reasons"
set count=
set numbers=
for %%a IN (%sentence%) DO (
call set "numbers=!numbers!!count!" & set /A count+=1
)
set Resulting number string: %numbers% %count%
,并且使用call
@echo off
set "sentence=this is a longer sentence because reasons"
set count=
set numbers=
for %%a IN (%sentence%) DO (
call set "numbers=%%numbers%% %%count%%" & set /A count+=1
)
echo Resulting number string: %numbers% %count%