Проблемы с экранированием специальных символов в пакетном файле
Я использую xmlstarlet для редактирования файла XML. Я столкнулся с проблемами именно с этими двумя командами.
xml ed -P --update /ns2:ExportManifest/ExportManifestEntity[@path='home/user_name/11.05 CFD Developer commits.xanalyzer']/ExportManifestProperty/EntityMetaData/@name -v 11.05 CFD Developer commits.xanalyzer someFile.xml > someFileNew.xml & move /Y someFileNew.xml someFile.xml
Эта команда не делает то, что должна. После запуска вышеупомянутого coomand я нахожу файл пустым. Нужно ли мне что-то сбежать, чтобы заставить эту команду работать?
Второй имеет знак процента. И я обнаружил, что в командном файле я могу избежать его с помощью %%
, Но, похоже, он не работает нормально, и я нахожу пустой файл таким же, как указано выше.
xml ed -P --update /ns2:ExportManifest/ExportManifestEntity[@path='home/user_name/11.05.DEV CFD commits %%28feature %%26 bug%%29 by Program.xanalyzer']/ExportManifestProperty/EntityMetaData/@name -v 11.05.DEV CFD commits (feature & bug) by Program.xanalyzer someFile.xml > someFileNew.xml & move /Y someFileNew.xml someFile.xml
Есть идеи?
1 ответ
При выполнении команд xmlstarlet в командном файле вы должны быть очень осторожны с пробелами в значениях атрибута. Я должен был использовать ""
сказать окнам, что все есть String
Вот. Но я должен был использовать ''
чтобы убедиться, что значение атрибута успешно прочитано и сопоставлено. Вот решение:
Новое значение, которое заменит старое, также должно быть в двойных кавычках.
xml ed -P --update /ns2:ExportManifest/ExportManifestEntity[@path="'home/user_name/11.05 CFD Developer commits.xanalyzer'"]/ExportManifestProperty/EntityMetaData/@name -v "11.05 CFD Developer commits.xanalyzer" someFile.xml > someFileNew.xml & move /Y someFileNew.xml someFile.xml
Я сделал то же самое для второй команды:
xml ed -P --update /ns2:ExportManifest/ExportManifestEntity[@path="'home/user_name/11.05.DEV CFD commits %%28feature %%26 bug%%29 by Program.xanalyzer'"]/ExportManifestProperty/EntityMetaData/@name -v "11.05.DEV CFD commits (feature & bug) by Program.xanalyzer" someFile.xml > someFileNew.xml & move /Y someFileNew.xml someFile.xml