批处理文件 - 根据变量中的字数创建一串数字
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%
正在尝试创建一个批处理文件,根据句子中的字数创建一串数字。
我有一个包含不同数量单词的变量,例如: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%