У меня есть небольшие улучшения в умном «всегда» решении Джеба. В настоящее время решение Джеба имеет следующие проблемы:
- Если начальный путь заключен в кавычки, то первый вывод
начинается с ""
- Если конечный путь заключен в кавычки, то последний вывод
заканчивается на ""
- Если какой-либо путь содержит безвредные, но нефункциональные последовательные "",
тогда на выходе сохраняется ""
- Если переменная содержит последовательный ;; разделители затем выводит ECHO выключен
Это решение устраняет незначительные проблемы, а также использует на 2 замены меньше. Также я устранил ненужное повторное включение / отключение отложенного расширения внутри цикла. (Изменить на 2011-10-30 упрощенная логика ENDLOCAL)
@echo off
setlocal DisableDelayedExpansion
set "var=%var:"=""%"
set "var=%var:^=^^%"
set "var=%var:&=^&%"
set "var=%var:|=^|%"
set "var=%var:<=^<%"
set "var=%var:>=^>%"
set "var=%var:;=^;^;%"
set var=%var:""="%
set "var=%var:"=""Q%"
set "var=%var:;;="S"S%"
set "var=%var:^;^;=;%"
set "var=%var:""="%"
setlocal EnableDelayedExpansion
set "var=!var:"Q=!"
for %%a in ("!var:"S"S=";"!") do (
if "!!"=="" endlocal
if %%a neq "" echo %%~a
)
Если вы хотите видеть пустую строку для каждого пустого пути, следующего из последовательных ;; разделители, тогда последняя строка цикла FOR может просто читать echo(%%~a
.
Или, возможно, было бы более очевидно отобразить пустые пути как "", используя:
if %%a=="" (echo "") else echo %%~a
Различные исправления пустых путей работают и для простого решения Джеба.
ОБНОВЛЕНИЕ: Вот простой однострочный текст, использующий JREPL.BAT
Вы можете использовать мою утилиту обработки текста с регулярными выражениями JREPL.BAT , чтобы получить простое, очень надежное решение. JREPL.BAT - это чистый скрипт (гибридный JScript / batch), который работает на любом компьютере под управлением Windows начиная с XP.
jrepl "([^;\q]+|\q.*?(\q|$))+" $0 /x /jmatch /s path