디렉토리 내에서 여러 텍스트 파일의 문자열을 Windows CMD로 검색하고 바꾸는 방법은 무엇입니까?


5

디렉토리 내에 여러 개의 텍스트 파일이 있으며 각 문자열은 1 setlinewidth 모든 문자열 을 10 setlinewidth로 바꿉니다 . Windows cmd를 통해 어떻게합니까? 도와주세요.

답변:


6

타사 유틸리티를 설치할 수있는 경우 Gnu sed 는 이러한 유형의 작업에 맞게 제작되었습니다. 이 링크는 Sourceforge에서 호스팅되는 Windows 버전을 가리키며 다운로드하여 설치할 수 있습니다. 이것은 프롬프트의 구문입니다.

for %i in (*.txt) do sed -i "s/1 setlinewidth/10 setlinewidth/g" %i

참고 :-i sed 옵션을 사용하면 문제의 파일을 덮어 쓰므로 문제가 발생할 경우를 대비하여 쉽게 사용할 수있는 백업이 있는지 확인하십시오.

sed 유틸리티를 설치할 수 없으면 내장 배치 언어 만 사용하면 훨씬 더 어려워집니다.

편집 : 외부 도구없이 교체를 수행 할 작은 배치 파일을 모았습니다. foo.cmd원하는 이름 또는 다른 이름 으로 저장하고 다음과 같이 명령 행에서 호출하십시오.foo.cmd

주의 사항 : 이것은 귀하의 질문에 나오는 예에서 매우 구체적으로 작성되었습니다. 이전 / 이후 행의 시작 또는 끝에 다른 텍스트 나 추가 공백 1 setlinewidth이 있으면이 배치 파일이 작동하지 않습니다. 또한 원본 텍스트 파일의 복사본을 .bak 확장자 (예 : textfile.txt.bak)로 저장합니다.

@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
)

파트 2 에 수정 사항이 있습니다. 기여해 주셔서 감사합니다!
Carla Hook

7

Powershell에는 외부 소프트웨어 나 유틸리티를 다운로드하지 않고도이 문제를 해결하는 유틸리티가 있습니다. Scripting Guy 가이 기사 를 확인하십시오 . 정말 좋습니다. 또한 Set-Content 설명서를 살펴보십시오 .

예:

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


집에서 내 PC를 사용하여 이것을 테스트했으며 작동합니다. 안타깝게도 직장 PC에는 PowerShell 스크립팅이 비활성화되어 기본 Windows CMD 프롬프트가 표시됩니다. 어쨌든 감사합니다 :)
칼라 후크

@CarlaHook PowerShell 스크립트를 실행할 때 다른 매개 변수를 사용하여이를 쉽게 비활성화 할 수 있습니다 . stackoverflow.com/a/9167524/5008962를 참조하십시오 .
rugk
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.