Пакетный файл для цикла удаляет узлы комментариев xml - PullRequest
1 голос
/ 19 апреля 2011

когда я анализирую xml-файл для обработки в пакетном задании, узлы комментариев кажутся измененными; это что-то делать со спецсимволами? как мне это предотвратить.

Узел, подобный этому: <!--Location: D:\\Logs--> будет выглядеть так при запросе через %% G: < D:\\Logs-->

Небольшой пример кода:

        **setLocal EnableDelayedExpansion
    for /f "usebackq tokens=* delims= " %%G in ("%HOMEDRIVE%\Logs\Connections.xml") do (

            set str=%%G     

        echo !str!

            PAUSE

    )

endlocal

    **

1 Ответ

2 голосов
/ 19 апреля 2011

У тебя три проблемы.

  1. При отложенном расширении он удаляет / обрабатывает ! и добавляет ^ в качестве специальных символов, так как ! оценивается после расширения for-loop-var %% G
  2. Некоторый текст нельзя отобразить с помощью простого echo, например OFF, ON или /?
  3. Пустые строки удаляются, поскольку цикл 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
)
...