Пакетный файл - создание строки чисел на основе количества слов в переменной

Попытка создать пакетный файл, который создает строку чисел, основанную на количестве слов в предложении.

У меня есть переменная, которая содержит различное количество слов, например: предложение ="это предложение"

Строка, которую мне нужно сгенерировать, будет "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" и т. Д.

Счетчик работает правильно, сообщая "Счетчик: 7", но строка просто сообщает "Результирующая строка: 1 "

Это не добавление счетчика в конец... и когда у меня есть его добавление, это приводит к "1 7" вместо "1 2 3 4 5 6 7"

Это независимо от того, использую ли я setlocal EnableDelayedExpansion или нет.

Что я здесь не так делаю?

(РЕДАКТИРОВАТЬ: Этот вопрос относится к ДОБАВЛЕНИЮ увеличивающегося числа к концу строки. Как я уже упоминал в моем исходном вопросе, EnableDelayedExpansion не имеет значения, если он включен или отключен)

1 ответ

Решение

Вам сначала желательно 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%
Другие вопросы по тегам