0

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

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

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

同样, sentence="this is a long 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”等。

计数器工作正常,报告“计数器:7”但字符串只报告“结果数字字符串:1”

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

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

我在这里做错了什么?

(编辑:这个问题与在字符串末尾追加一个递增数字有关。正如我在原始问题中提到的,EnableDelayedExpansion 启用或禁用没有区别)

4

1 回答 1

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%
于 2019-02-05T11:39:41.687 回答