У меня есть несколько текстовых файлов в одном каталоге, каждый из которых я хочу заменить все вхождения строки 1 setlinewidth до 10 setlinewidth. Как сделать это с помощью Windows cmd? Пожалуйста помочь.
Как найти и заменить строку в нескольких текстовых файлах (в каталоге) с помощью Windows CMD?
2 ответа
если вы можете установить сторонние утилиты, Gnu sed идеально подходит для этого типа работы. Ссылка указывает на версию Windows, размещенную в Sourceforge, которую можно загрузить и установить. Это будет синтаксис в командной строке:
for %i in (*.txt) do sed -i "s/1 setlinewidth/10 setlinewidth/g" %i
Примечание: С -i
опция, sed собирается перезаписать файлы, о которых идет речь, поэтому убедитесь, что у вас есть легко доступные резервные копии на всякий случай, если что-то пойдет не так.
если вы не можете установить утилита sed, это будет намного сложнее, используя только встроенный пакетный язык.
изменить: я собрал небольшой пакетный файл, который будет выполнять замену без каких-либо внешних инструментов. Сохраните его как foo.cmd
или как предпочтительное имя и вызывать его из командной строки: foo.cmd
предостережение: это написано очень конкретно из примеров в вашем вопросе. Если есть другой текст или даже дополнительные пробелы в начале или в конце строки перед / после 1 setlinewidth
этот пакетный файл не будет работать. Это также сохранит копию исходного текстового файла как с a .расширение bak (например, textfile.формат txt.бак.)
@echo off
setlocal ENABLEEXTENSIONS
setlocal ENABLEDELAYEDEXPANSION
for %%a in (*.txt) do (
echo Processing %%a...
for /f "delims=^ tokens=1" %%i in (%%a) do (
if /i "%%i"=="1 setlinewidth" (
echo 10 setlinewidth>>%%a.new
) else (
echo %%i>>%%a.new
)
)
move /y %%a %%a.bak > nul
ren %%a.new %%a
)
Powershell имеет утилиты, которые решают эту проблему без загрузки какого-либо внешнего программного обеспечения или утилит. Check out в этой статье по сценаристом, это довольно хорошо. Также я бы сказал, взгляните на Set-Content документация.
пример:
(Get-Content C:\Scripts\Test.txt) |
Foreach-Object {$_ -replace "oldString", "newString"} |
Set-Content C:\Scripts\Test.txt
Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]