2016-08-16 2 views
0

Я хочу перебрать CSV-как строку: элемент, элемент, элемент, [...], элементУдалить пространство из умолчанию разделителя в пакете

Таким образом, я использовал этот тип цикла:

for %%a in (%%l) do (
    code ... 
) 

с %% a мои элементы и %% l моя строка.

Работает, но у меня есть одна проблема. Мой элемент может иметь пробел в нем, и цикл автоматически учитывает один элемент с пространством для двух элементов. Например, если я получил 05/05/2015 15:05:12 в качестве элемента, он будет разобран в два круга, 05/05/2015 затем 15:05:12. Итак, я хочу удалить пространство как разделитель. Является ли это возможным ?

+0

Используйте вместо этого 'FOR/F'. – Squashman

+0

С «delims =;», я перебираю первый элемент, но не другие ... –

+0

Храните '%% l' в переменной intermin, например' set 'LINE = %% l "', затем сделайте это (предположив [ (http://ss64.com/nt/delayedexpansion.html) разрешено): 'for %% a in ("! LINE:; = ";"! ") do (rem Использовать' %% ~ a 'здесь, чтобы удалить кавычки.)' – aschipfl

ответ

2

for использует ПРОСТРАНСТВО, TAB, ,, ;, = и пространство без перерыва (ASCII 0xFF) в качестве разделителей (например, cmd делает тоже), если они не заключены в паре ".

Мы можем использовать что:

rem The following is placed inside your `for /F` loop: 
set "LINE=%%l" 
setlocal EnableDelayedExpansion 
for %%a in ("!LINE:;=";"!") do (
    rem Use `%%~a` here to remove quotes. 
) 
endlocal 

Часть "!LINE:;=";"!" охватывающую линию между "" и заменяет каждый разделитель ; по ";", таким образом мы получаем список цитируемых ; -разделенное пунктов.

Например, линия ...:

element;05/05/2015 15:05:12;element 

... становится это:

"element";"05/05/2015 15:05:12";"element" 

Отсюда ПРОСТРАНСТВО появляется между а пара ", поэтому он не считается объявлением элитари.

Обратите внимание, что delayed expansion здесь необходимо использовать, потому что переменная (LINE) написал и прочитать в том же блоке кода, а именно вашего for /F %%l цикла.

+0

Спасибо, это хорошее объяснение, чтобы пойти с вашим кодом! –

Смежные вопросы