У тебя три проблемы.
- При отложенном расширении он удаляет / обрабатывает
!
и добавляет ^
в качестве специальных символов, так как !
оценивается после расширения for-loop-var %% G
- Некоторый текст нельзя отобразить с помощью простого
echo
, например OFF
, ON
или /?
- Пустые строки удаляются, поскольку цикл FOR не обрабатывает их
Чтобы решить 1. Вы должны использовать трюк с задержкой переключения
Для решения 2. вы можете использовать форму echo(
.
Итак, вы получите
setLocal DisableDelayedExpansion
for /f "usebackq tokens=* delims=" %%G in ("%HOMEDRIVE%\Logs\Connections.xml") do (
set "str=%%G"
setLocal EnableDelayedExpansion
echo(!str!
endlocal
)
Если вы хотите решить 3. (пустые строки), вы можете использовать findstr /n
для нумерации всех строк, чтобы ни одна строка не была пустой, а затем удалить номер в цикле.
setLocal DisableDelayedExpansion
for /f "usebackq tokens=* delims=" %%G in (`findstr /n "^" "list.txt"`) do (
set "str=%%G"
setLocal EnableDelayedExpansion
echo(!str:*:=!
endlocal
)