Я пытаюсь включить все данные в [] (не конкретные токены!)

Я пытаюсь включить все данные в [] (не конкретные токены!) Я пытаюсь использовать цикл, но он дает только 1 параметр.

Пример того, что мне нужно:

set "x=Stackoverflow [I need it] and [I need this too] and [this too]"

output => I need it, I need this too, this too

Пытался сделать:

  for /f "delims=[]" %%a in ("%x%") do (
      echo %%a
  )

Теперь нам нужен пример того, что вы пробовали, с объяснением того, что произошло, когда вы это сделали. Обратите внимание, что этот сайт не является бесплатным сервисом для написания кода.

Compo 10.08.2018 15:05

Я редактирую свой вопрос

dauzduz TV 10.08.2018 15:09

Так что же произошло и как это противоречило вашим ожиданиям? Введите For /? в командной строке, прочтите информацию об использовании, уделяя особое внимание tokens, а также delims.

Compo 10.08.2018 15:11

код повторяется только 1 раз, например, код выполняется и дает 1 эхо переменной x: output => Stackoverflow

dauzduz TV 10.08.2018 15:14

Как я уже говорил, прочтите использование команды, которую вы используете.

Compo 10.08.2018 15:17

Я пробовал токены, но не могу их использовать, потому что не знаю, где будет [], я дал эту строку, например

dauzduz TV 10.08.2018 15:21

Я просил вас показать, что вы пробовали, вы не показали никаких попыток использования Tokens. Я, конечно, не говорю вам, что Tokens - ваше окончательное решение, но мы здесь не для того, чтобы тратить весь день, пытаясь угадать или расспросить вас о той информации, о которой вы нам не рассказали.

Compo 10.08.2018 15:29
0
7
45
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

вы можете использовать "tokens=2,4,6,8,10,12 delims=[]", но постобработка результата (удаление дополнительных запятых / пробелов) затруднительна. Тот же эффект может быть достигнут путем предварительной обработки строки и разделения с помощью простого цикла for. Переменная flag заботится об использовании только каждого второго токена. Я добавил _ перед строкой, чтобы правильно обрабатывать строки, начинающиеся с [. set /a "flag=(flag+1) %% 2" чередует переменную flag между 0 и 1.

@echo off
setlocal enabledelayedexpansion
set "x=[this] not [that] not [yes] no [in] out"
set "y=_%x:[=","%"
set "y=%y:]=","%"

set flag=0
for %%a in ("%y%") do (
  if !flag!==1 set "result=!result!, %%~a"
  set /a "flag^=1"
)
if defined result set "result=%result:~2%"
echo output = %result%

Выход:

output = this, that, yes, in
set /a "flag=(flag+1) %% 2" можно упростить до set /a "flag^=1". И, возможно, set result=!result!, "%%~a", поэтому позже к каждому извлеченному токену можно будет получить доступ отдельно для другого голого FOR, хотя не уверен, что это то, что хотел OP. +1
sst 10.08.2018 18:33

Я даю вам голос, но я сказал, что не знаю, где находится [] в строке, и не факт, что [] существует какие-либо 2 токена, я использовал другой способ

dauzduz TV 10.08.2018 18:34

@dauzduzTV, вы вообще код тестировали? Неважно, где в строке появляется [], и приятным в этом подходе является то, что не имеет значения, сколько [] у вас в строке, будь то 1 или 100, он извлекает их все. Если есть вероятность, что [] не присутствует в строке, то это может легко разрешить if "%x%"=="%x:[=%". А каким другим способом вы пользовались?

sst 10.08.2018 19:07

добавлена ​​строка для заботы о "no []"" и реализован метод @ sst "flag" (никогда раньше не использовал OR с set /a, но да - очень полезно)

Stephan 10.08.2018 19:53
Ответ принят как подходящий

Очень простой способ:

@echo off
setlocal EnableDelayedExpansion

set "x=Stackoverflow [I need it] and [I need this too] and [this too]"

set "output=" & set "p=%x:]=" & set "output=!output!, !p:*[=!" & set "p=%"

echo output =^> %output:~2%

Выход:

output => I need it, I need this too, this too

Для объяснения используемого метода вы должны удалить строку @echo off, запустить программу и внимательно просмотреть выполненный код. Если вам нужны дополнительные объяснения, просмотрите Эта тема.

Другие вопросы по теме