Команда REPLACE – заменить или добавить файл в каталог.
Команда REPLACE используется для замены одного или нескольких файлов в командной строке Windows. Применяется в для синхронизации содержимого каталогов и перезаписи только тех файлов, которые изменились позже, чем дата изменения существующих.
Формат командной строки:
REPLACE [диск1:][путь1]имя_файла [диск2:][путь2] [/A] [/P] [/R] [/W]
Замена файлов на новые:
REPLACE [диск1:][путь1]имя_файла [диск2:][путь2] [/P] [/R] [/S] [/W] [/U]
Параметры командной строки:
[диск1:][путь1]имя_файла — Один или несколько исходных файлов. [диск2:][путь2] — Каталог, в котором следует заменить файлы./A — Добавление новых файлов в конечный каталог. Этот ключ несовместим с ключами /S и /U.
/P — Вывод запроса перед заменой или добавлением файла.
/R — Разрешение замены файлов, предназначенных только для чтения (среди прочих).
/S — Замена файлов во всех подкаталогах конечного каталога. Этот ключ несовместим с ключом /A.
/W — Ожидание вставки диска перед началом выполнения.
/U — Замена только файлов, более старых, чем исходные. Этот ключ несовместим с ключом /A.
Команда REPLACE не позволяет обновить файлы, имеющие атрибуты ”Скрытый” и ”Системный”. Примеры использования:
replace /? — отобразить подсказку по использованию.
replace c:\Folder1\doc2.doc D:\folder2 /A — добавить файл doc2.doc из каталога Folder1 диска C: в каталог Folder2 диска D:
replace c:\Folder1\*.* D:\folder2 /A — добавить все недостающие файлы из каталога Folder1 диска C: в каталог Folder2 диска D:
replace c:\Folder1\*.docx D:\folder2 /U — заменить все файлы с расширением .docx в каталоге Folder2 диска D: на файлы из каталога Folder1 диска C: Выполняется замена только тех файлов, у которых время изменения меньше, чем время заменяющего файла. Данная команда используется для синхронизации содержимого двух каталогов, содержащих одинаковый набор файлов с отличающимся содержимым.
Если исходный и конечный файл имеют одно и то же время модификации, то замена не выполняется. Код завершения ERRORLEVEL устанавливается в 0 независимо от того, выполнялась перезапись конечного файла или нет. При перезаписи, программа выводит на экран сообщение о замене существующего файла:
В случае, когда перезапись не выполняется – сообщение о замене файла отсутствует. Возможные значения ERRORLEVEL при неудачном выполнении команды:
ERRORLEVEL=3 – не найдены пути исходных или конечных файлов.
ERRORLEVEL=11 – недопустимая комбинация параметров командной строки.
How-to: Edit/Replace text within a Variable
Use the syntax below to edit and replace the characters assigned to a string variable.
This Edit/Replace syntax can be used anywhere that you would use the %variable% such as ECHOing the variable to screen or setting one variable = another
param_ext cannot be %* which typically represents a whole set of parameters, but this is easily worked around by setting a variable =%*
«StrToFind» can begin with an asterisk, in which case it will replace all characters to the left of «StrToFind».
By leaving NewStr blank, you can delete characters.
Using both an asterisk and NewStr=null effectively provides a left$() or right$() function.
Examples:
The variable _test containing 12345abcabc is used for all the following examples:
All the examples on this page assume the default Expansion of variables, if you are using DelayedExpansion then you can choose to change the variable references to !_variable! instead of %_variable%
One advantage of DelayedExpansion is that it will allow you to replace the % character, it will still have to be escaped as %% but the replace action will then treat it like any other charecter:
Replace the letter P with a percent symbol:
Setlocal EnableDelayedExpansion
_demo=somePdemoPtextP
_demo=!_demo:P=%%!
Remove spaces from a text string
To delete space characters use the same syntax as above:
Boolean Test «does string exist ?»
To test for the existence of a value we can use a temporary variable, delete the string we are looking for (if it exists) and then compare the two variables with EQU
Example: test for the existence of the string » London » in a variable containing text (that could be in any order) » Aberdeen, London, Edinburgh «
Set _cities=»Aberdeen, London, Edinburgh»
:: Remove London if found
Set _dummy=%_cities:London=%
IF NOT %_dummy% == %_cities% (ECHO London was found.) ELSE (ECHO London was not found.)
Finding items within the PATH environment variable
The %PATH% variable contains a list of folder names.
If you have a parameter containing a valid ‘folder’ this can be compared with the PATH variable.
This is done using the syntax: $variable:parameter
%PATH% = C:\Windows\system32;C:\Windows;C:\utils\jdk\bin
batch parameter %1 = C:\utils\jdk\bin
To get the drive and Path
ECHO %
dp$PATH:1
This will either return «C:\utils\jdk\bin» or a NULL if the item is not found in the %PATH%
If the batch parameter was supplied as %2 then this would be: ECHO %
This syntax can be applied where:
- The parameter is any valid parameter (%1 %2 %G) but it must contain a Full Path (not a pathname)
- The variable is %PATH% or any other variable that contains one or more Paths or pathnames separated by semicolons ;
- If nothing is found by the search, then this will return an empty string (NULL)
Be wary of using the syntax on this page to modify the PATH — the User path can be edited, but the System path remains read-only for most users.
“A phony smile will never replace honest integrity”
Как найти и заменить текст в файле с помощью среды командной строки Windows?
Я пишу сценарий пакетного файла с помощью среды командной строки Windows и хочу изменить каждое вхождение некоторого текста в файле (например. «FOO») с другим (ex. «БАР.)» Как это сделать проще всего? Любые встроенные функции?
26 ответов
Если вы находитесь в версии Windows, которая поддерживает .Net 2.0, я бы заменил вашу оболочку. PowerShell дает вам полную мощность .Net из командной строки. Есть много командлетов, встроенных также. Приведенный ниже пример решит ваш вопрос. Я использую полные имена команд, есть более короткие псевдонимы, но это дает вам что-то искать в Гугле.
многие ответы здесь помогли указать мне в правильном направлении, однако ни один из них не подходил для меня, поэтому я публикую свое решение.
у меня есть Windows 7, который поставляется со встроенным PowerShell. Вот скрипт, который я использовал для поиска / замены всех экземпляров текста в файле:
- powershell запускает powershell.exe, который включен в Windows 7
- -Command «. » является arg командной строки для в PowerShell.exe, содержащий команду для запуска
- (gc myFile.txt) читает содержание myFile.txt ( gc сокращенно от Get-Content команда)
- -replace ‘foo’, ‘bar’ просто запускает команду replace для замены foo С bar
- | Out-File myFile.txt передает выходные данные в файл myFile.txt
в PowerShell.exe должен быть частью вашего оператора PATH уже, но если нет, вы можете добавить его. Расположение его на моей машине C:\WINDOWS\system32\WindowsPowerShell\v1.0
просто использовать пердеть («F ind A nd R eplace T ext» утилита командной строки):
отличная бесплатная программа для замены текста в большом наборе файлов.
будет просматривать замены рекурсивно в файлах этого Perl распределение.
единственная проблема: значок веб-сайта пердеть не совсем со вкусом, изысканный или элегантный;)
Replace-заменить подстроку с помощью подстановки строк Описание: для замены подстроки другой строкой используйте функцию подстановки строк. Приведенный здесь пример заменяет все вхождения «teh» орфографические ошибки на «the» в строковой переменной str.
создать файл заменить.vbs:
использовать этот пересмотренный скрипт (который мы будем называть replace.ВБС) просто введите следующую команду из командной строки:
cscript replace.vbs «C:\Scripts\Text.txt» «Jim » «James «
BatchSubstitute.bat ВКЛ dostips.com является примером поиска и замены с использованием чистого пакетного файла.
Он использует комбинацию FOR , FIND и CALL SET .
строки, содержащие символы среди «&<>]|^ может рассматриваться неправильно.
Примечание — обязательно см. обновление в конце этого ответа для ссылки на улучшенный JREPL.Летучая мышь, которая заменяет REPL.Летучая мышь!—11—>
JREPL.BAT 7.0 и выше изначально поддерживает unicode (UTF-16LE) через /UTF опция, а также любой другой набор символов, включая UTF-8, через ADO.
REPL.BAT просто читает stdin, выполняет поиск и замену регулярных выражений JScript и записывает результат в stdout.
вот тривиальный пример того, как замените foo на bar в тесте.txt, предполагая REPL.BAT находится в вашей текущей папке, или еще лучше, где-то в пределах вашего пути:
возможности JScript regex делают его очень мощным, особенно способность текста замены ссылаться на захваченные подстроки из текста поиска.
я включил ряд опций в утилиту, которые делают ее довольно мощной. Например, объединение M и X опции позволяют изменять двоичные файлы! The M многострочная опция позволяет выполнять поиск по нескольким строкам. The X опция расширенного шаблона подстановки предоставляет escape-последовательности, которые позволяют включить любое двоичное значение в текст замены.
вся утилита могла быть написана как чистый JScript, но гибридный пакетный файл устраняет необходимость явно указывать CSCRIPT каждый раз, когда вы хотите использовать утилиту.
вот REPL.Bat скрипт. Полная документация встроена в скрипт.
ВАЖНОЕ ОБНОВЛЕНИЕ
я прекратил развитие REPL.Бат, и заменил его на JREPL.ЛЕТУЧАЯ МЫШЬ. Эта новая утилита имеет все ту же функциональность REPL.Летучая мышь, плюс многое другое:
- поддержка Unicode UTF-16LE через собственные возможности cscript unicode и любой другой набор символов (включая UTF-8) через ADO.
- чтение непосредственно из / запись непосредственно в файл: нет необходимости трубы, перенаправление или команда перемещения.
- включить пользовательский JScript
- средство перевода подобно unix tr, только оно также поддерживает поиск regex и JScript replace
- отбросить несоответствующий текст
- префикс выходных строк с номером строки
- и многое другое.
как всегда, полная документация встроена в сценарий.
первоначальное тривиальное решение теперь даже проще:
текущая версия JREPL.Летучая мышь доступна на DosTips. Прочитайте все последующие сообщения в потоке, чтобы увидеть примеры использования и историю разработки.
использовать FNR
использовать fnr утилиты. У него есть некоторые преимущества перед fart :
- регулярные выражения
- дополнительный интерфейс. Имеет кнопку «создать командную строку» для создания текста командной строки для размещения в пакетном файле.
- многострочные шаблоны: GUI позволяет легко работать с многострочными шаблонами. В FART вам придется вручную избегать разрывов линий.
- позволяет выбрать кодировку файла. Также имеет автоматическое обнаружение выбор.
пример использования : fnr —cl —dir » » —fileMask «hibernate.*» —useRegEx —find «find_str_expression» —replace «replace_string»
Я не думаю, что есть способ сделать это с помощью встроенных команд. Я бы предложил вам скачать что-то вроде Gnuwin32 или UnxUtils и с помощью sed команда (или загрузить только sed ):
Я знаю, что опаздываю на вечеринку..
мы также широко используем функцию Dedupe, чтобы помочь нам ежедневно доставлять примерно 500 электронных писем через SMTP из: — https://groups.google.com/forum#!тема / alt.msdos.партия.nt/sj8IUhMOq6o
и они оба работают изначально без дополнительных инструментов или утилит необходимый.
DEDUPLICATOR (обратите внимание на использование -9 за номер ABA):
когда вы работаете с Git на Windows тогда просто запустите git-bash и использовать sed . Или, при использовании Windows 10, запустите «Bash on Ubuntu on Windows» (из подсистемы Linux) и используйте sed .
его редактор потока, но может редактировать файлы напрямую, используя следующую команду:
- -i опция используется для редактирования на месте имя файла.
- -e опция указывает команду для запуска.
- s используется для замены найденного выражения «foo» на » bar » и g используется для замены любых найденных совпадений.
если вы хотите заменить строку в файлы только из репозитория Git, вы можете использовать:
git ls-files | xargs sed -i -e ‘s/foo/bar/g’
, который творит чудеса.
я использовал perl, и это прекрасно работает.
.orig-это расширение, которое он добавит к исходному файлу
для нескольких совпадающих файлов, таких как *.HTML-код
Я играл с некоторыми из существующих ответов здесь и предпочитаю мое улучшенное решение.
или если вы хотите сохранить вывод в файл.
преимущество этого заключается в том, что вы можете передавать вывод из любой программы. Рассмотрим использование регулярных выражений с этим тоже. Не мог понять,как сделать его в файл BAT для более легкого использования. 🙁
1) с e? опция, которая будет оценивать специальные последовательности символов, такие как \n\r и последовательности unicode. В этом случае заменит quoted «Foo» и «Bar» :
2) Простая замена, где Foo и Bar не котируются.
вот решение, которое я нашел, работало на Win XP. В моем запущенном пакетном файле я включил следующее:
на Как ниже. Я не нашел способ включить эту функцию в тот же пакетный файл, потому что %%a переменная всегда, кажется, дает последнее значение в цикле for.
посмотри есть ли какая-либо утилита sed like для cmd.exe который попросил эквивалент sed под Windows, должен применяться и к этому вопросу. Резюме:
- Это можно сделать в пакетном файле, но это не очень
- много доступных сторонних исполняемых файлов, которые сделают это за вас, если у вас есть роскошь установки или просто копирования через exe
- можно сделать с VBScript или подобным, если вам нужно что-то способное запустить на Windows, без изменений и т. д.
может быть немного поздно, но я часто ищу подобные вещи, так как я не хочу проходить через боль от получения программного обеспечения, одобренного.
однако вы обычно используете оператор FOR в различных формах. Кто-то создал полезный пакетный файл, который выполняет поиск и замену. Посмотрите здесь. Важно понимать ограничения предоставляемого пакетного файла. По этой причине я не копирую исходный код в этом ответе.
два пакетных файла, которые поставляют search and replace функции были написаны членами переполнения стека dbenham и aacini используя native built-in jscript в Windows.
они оба robust и very swift with large files по сравнению с обычными пакетными сценариями, а также simpler использовать для основной замены текста. Они оба имеют Windows regular expression сопоставление с образцом.
1) Это sed-like вспомогательный пакетный файл называется repl.bat (by dbenham) — загрузить с: https://www.dropbox.com/s/qidqwztmetbvklt/repl.bat
пример использования L буквальное выключатель:
2) этой grep-like вспомогательный пакетный файл называется findrepl.bat (by aacini) — загрузить с: https://www.dropbox.com/s/rfdldmcb6vwi9xc/findrepl.bat
пример с активными регулярными выражениями:
оба становятся мощными общесистемными утилитами when placed in a folder that is on the path , или может быть использован в той же папке с пакетным файлом, или из командной строки.
у них обоих есть case-insensitive переключатели, а также многие другие функции.
команда Power shell работает как шарм
просто столкнулся с аналогичной проблемой — «поиск и замена текста в файлах», но за исключением того, что для имен файлов и поиска/repalce мне нужно использовать regex. Поскольку я не знаком с Powershell и хочу сохранить свои поиски для последующего использования, мне нужно что-то более «удобное» (предпочтительнее, если у него есть GUI).
Итак, в то время как Googling 🙂 я нашел отличный инструмент -FAR (найти и заменить) (не фарт).
эта маленькая программа имеет хороший графический интерфейс и поддержку regex для поиска в именах файлов и внутри файлов. Единственным недостатком является то, что если вы хотите сохранить ваши настройки вам нужно запустить программу от имени администратора (по крайней мере на Win7).
Это одна вещь, которую пакетные сценарии просто не делают хорошо.
скрипт morechilli linked to будет работать для некоторых файлов, но, к сожалению, он задохнется на тех, которые содержат символы, такие как трубы и амперсанды.
VBScript является лучшим встроенным инструментом для этой задачи. См. эту статью для примера: http://www.microsoft.com/technet/scriptcenter/resources/qanda/feb05/hey0208.mspx
@Rachel дал отличный ответ, но вот его вариант для чтения содержимого в powershell $data переменной. Затем вы можете легко манипулировать содержимым несколько раз перед записью в выходной файл. Также смотрите, как многострочные значения приведены в .летучая мышь пакетных файлов.
используйте powershell .bat-для Windows 7+
кодировка utf8 необязательна, хороша для веб-сайтов
скачать Cygwin (бесплатно) и используйте unix-подобные команды в командной строке Windows.
ваш лучший выбор: sed
также можно увидеть инструменты Replace и ReplaceFilter в https://zoomicon.github.io/tranXform/ (Источник включен). Второй-это фильтр.
инструмент, который заменяет строки в файлах, находится в VBScript (требуется Windows Script Host [WSH] для запуска в старых версиях Windows)
фильтр, вероятно, не работает с Unicode, если вы не перекомпилируете с последними Delphi (или с FreePascal/Lazarus)
Я сталкивался с этой проблемой несколько раз при кодировании в Visual C++. Если он у вас есть, вы можете использовать утилиту поиска и замены Visual studio. Он позволяет выбрать папку и заменить содержимое любого файла в этой папке любым другим текстом, который вы хотите.
В Visual Studio: Правка -> найти и заменить В открывшемся диалоговом окне выберите папку и нажмите «Найти» и «заменить» поля. Надеюсь, это будет полезно.