批处理文件-根据变量中的字数创建数字字符串

时间:2019-02-05 11:16:41

标签: windows batch-file delayedvariableexpansion

尝试创建一个批处理文件,该文件根据句子中的单词数创建一个数字字符串。

我有一个变量,其中包含不同数量的单词,例如:句子=“这是一个句子”

我需要生成的字符串是“ 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都没有影响

1 个答案:

答案 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%