Как заменить строку замены на строку поиска, содержащую = - PullRequest
0 голосов
/ 05 октября 2018

[Отредактированный вопрос, чтобы попытаться сделать его более понятным]

Простой вопрос, я думаю ....

Я пытаюсь использовать следующий пакетный код для замены строки в текстовом файле.;

@echo off
set "replace=#user=guest"
set "replaced=user=StoreUser1"

set "source=C:\Users\adam\Desktop\test.txt"
set "target=C:\Users\adam\Desktop\test1.txt"

setlocal enableDelayedExpansion
(
   for /F "tokens=1* delims=:" %%a in ('findstr /N "^" %source%') do (
      set "line=%%b"
      if defined line set "line=!line:%replace%=%replaced%!"
      echo(!line!
   )
) > %target%
endlocal

Не выполняется должным образом, он просто оставляет текст без изменений.Однако, если я изменяю команды SET (и, конечно, текст в текстовом файле) как;

set "replace=#userguest"
set "replaced=userStoreUser1"

, тогда это работает как ожидалось.Я предполагаю, что второе '=', которое требуется , заставляет SET работать неправильно и потребности как-то ускользнули.

Надеюсь, что это имеет смысл и заранее спасибо!

Адам

1 Ответ

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

Невозможно экранировать = в строке поиска.Таким образом, невозможно выполнить поиск / замену расширения переменной, если строка поиска содержит =.

. Это было тщательно исследовано при https://www.dostips.com/forum/viewtopic.php?f=3&t=1485.. Были найдены различные стратегии для решения проблемы.Но я не думаю, что вы хотите пойти по этой кроличьей норе.

Это одна из многих причин, по которой редактирование текстовых файлов через пакет обычно не является хорошей идеей.

Вы можете попробовать PowerShellЯ уверен, что это было бы довольно просто, если бы вы знали этот язык сценариев.

Или вы могли бы использовать мою утилиту поиска / замены регулярного выражения .Это чистый скрипт (гибридный JScrpt / batch), который работает на любом компьютере под управлением Windows начиная с XP - сторонний exe-файл не требуется.Полная документация встроена в сценарий и доступна из командной строки через jrepl /? или jrepl /?? для справки по страницам./jrepl /?help перечисляет все виды помощи.Например, jrepl /?options дает краткую сводку по каждой опции.

call jrepl "#user=guest" "user=StoreUser1" /f "C:\Users\adam\Desktop\test.txt" /o "C:\Users\adam\Desktop\test1.txt"

или

set "replace=#user=guest"
set "replaced=user=StoreUser1"

set "source=C:\Users\adam\Desktop\test.txt"
set "target=C:\Users\adam\Desktop\test1.txt"

call jrepl replace replaced /v /f "%source%" /o "%target%"

Если вы хотите перезаписать исходный файл, тогда

set "replace=#user=guest"
set "replaced=user=StoreUser1"

set "source=C:\Users\adam\Desktop\test.txt"

call jrepl replace replaced /v /f "%source%" /o -
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...