Удалить определенный текст через пакетный файл - PullRequest
0 голосов
/ 09 октября 2018

Я столкнулся с проблемой в моей Entity-Framework, когда мы создаем модель данных сначала по базе данных (в Oracle).Это дает нам сгенерированный .edmx.Мы заметили, что, когда схема находится в .dll, невозможно использовать эту модель данных с другим именем схемы, отличным от того, которое находится в .edmx.Мы также выяснили, что когда вы удаляете имя схемы, вы можете использовать файл data.dll в разных схемах.

Мой вопрос: возможно ли создать файл .bat для циклического перемещения по тексту и удалить всю схему= "....." значения?

Я разобрался с некоторыми сайтами, но не знаю, как это сделать, чтобы удалялось правильное

Замена символов втекстовый файл из пакетного файла Windows

Снимок нашего .edmx

 <EntityContainer Name="ModelStoreContainer">
  <EntitySet Name="BS_AMBITION" EntityType="Self.BS_AMBITION" Schema="KNOWLEDGEBASE_MODEL" store:Type="Tables" />
  <EntitySet Name="BS_BRANCH" EntityType="Self.BS_BRANCH" Schema="KNOWLEDGEBASE_MODEL" store:Type="Tables" />
  <EntitySet Name="BS_GROUP" EntityType="Self.BS_GROUP" Schema="KNOWLEDGEBASE_MODEL" store:Type="Tables" />
</EntityContainer>

Результат должен быть (без атрибута схемы):

<EntityContainer Name="ModelStoreContainer">
  <EntitySet Name="BS_AMBITION" EntityType="Self.BS_AMBITION" store:Type="Tables" />
  <EntitySet Name="BS_BRANCH" EntityType="Self.BS_BRANCH" store:Type="Tables" />
  <EntitySet Name="BS_GROUP" EntityType="Self.BS_GROUP" store:Type="Tables" />
</EntityContainer>

Я надеюсь, что вопрос ясен.Заранее спасибо!

1 Ответ

0 голосов
/ 09 октября 2018

Это легко достижимая задача с использованием JREPL.BAT , написанного Дейвом Бенхамом , который представляет собой гибрид пакетного файла / JScript для выполнения замены регулярного выражения в файле с использованием JScript..

@echo off
if not exist "*.edmx" goto :EOF
if not exist "%~dp0jrepl.bat" goto :EOF

for %%I in (*.edmx) do call "%~dp0jrepl.bat" "[\t ]*Schema=\x22.*?\x22" "" /I /F "%%I" /O -

Пакетный файл сначала проверяет, существует ли какой-либо файл * .edmx в текущем каталоге, и сразу же завершает работу, если это условие не соответствует действительности, см. Куда возвращается GOTO: EOF?

Пакетный файл JREPL.BAT должен храниться в том же каталоге, что и пакетный файл с кодом выше.По этой причине пакетный файл проверяет следующее, действительно ли JREPL.BAT существует в каталоге пакетного файла, и завершается, если это условие не выполняется.

Команда FOR ищет в текущем каталоге не скрытые файлы, соответствующие шаблону подстановочного знака *.edmx, и вызывает для каждого найденного EDMX-файла пакетный файл JREPL.BAT , чтобы без учета регистра заменить любое вхождение [\t ]*Schema=".*?" пустой строкой дляудалите этот атрибут.

Значение строки поиска регулярного выражения:

  • [\t ]* ... найти символ горизонтальной табуляции или пробел 0 или более раз.
  • Schema= ... найти эту строку без учета регистра из-за опции /I.
  • \x22 ... найти символ двойной кавычки, указанный в значении его шестнадцатеричного кода из-за двойной кавычкив аргументах с двойными кавычками строка невозможна.
  • .*? ... найти 0 или более символов без жадности, т. е. останавливаться на следующей ", а не на последней " в строке.
  • \x22 ... найти снова " со ссылкой на его шестнадцатеричное значение кода.

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

  • call /? ... объясняет также, что %~dp0 ... диск и путь к аргументу 0 являются самим пакетным файлом.
  • echo /?
  • for /?
  • goto /?
  • if /?
  • jrepl.bat /?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...