Пакетный файл - создание строки чисел на основе количества слов в переменной
Попытка создать пакетный файл, который создает строку чисел, основанную на количестве слов в предложении.
У меня есть переменная, которая содержит различное количество слов, например: предложение ="это предложение"
Строка, которую мне нужно сгенерировать, будет "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%