Как найти и заменить строку в нескольких текстовых файлах (в каталоге) с помощью Windows CMD?

У меня есть несколько текстовых файлов в одном каталоге, каждый из которых я хочу заменить все вхождения строки 1 setlinewidth до 10 setlinewidth. Как сделать это с помощью Windows cmd? Пожалуйста помочь.

20
задан Carla Hook
09.05.2023 18:14 Количество просмотров материала 2943
Распечатать страницу

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
)
6
отвечен Scott McKinney 2023-05-11 02:02

Powershell имеет утилиты, которые решают эту проблему без загрузки какого-либо внешнего программного обеспечения или утилит. Check out в этой статье по сценаристом, это довольно хорошо. Также я бы сказал, взгляните на Set-Content документация.

пример:

(Get-Content C:\Scripts\Test.txt) | Foreach-Object {$_ -replace "oldString", "newString"} | Set-Content C:\Scripts\Test.txt

6
отвечен thisguy123 2023-05-11 04:19

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх