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

Batch file - creating a string of numbers based on a word count in a variable

正在尝试创建一个批处理文件,根据句子中的字数创建一串数字。

我有一个包含不同数量单词的变量,例如:sentence="this is a sentence"

我需要生成的字符串是“1 2 3 4”,因为句子中有 4 个词。

同样,sentence="this is a longer sentence because reasons" 会生成“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" 但是字符串只报告 "Resulting number string: 1 "

它没有将计数器添加到末尾...当我追加它时,结果是“1 7”而不是“1 2 3 4 5 6 7”

这与我是否使用setlocal EnableDelayedExpansion无关。

我做错了什么?

(编辑:这个问题与将递增数字附加到字符串末尾有关。 正如我在最初的问题中提到的,启用或禁用 EnableDelayedExpansion 没有任何区别)

您首先需要 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%