2017-01-11 3 views
0

저는 이미이 작업을 2 ~ 3 시간 동안 했으므로 내가 무엇을 놓칠 지 알 수 없습니다. 기본적으로 폴더와 하위 폴더에있는 모든 XML 파일의 목록을 가져오고 있습니다. 이 파일을 반복하면서 문자열을 다른 것으로 바꾸고 같은 파일로 다시 작성합니다. 아래는 제가 작업하고있는 라인입니다 :라인이 제대로 벗어나지 않을 수도 있습니다.

$destination = "C:\Temp\TestFolder" 
$newString = "#NewString#" 

Get-ChildItem '$($destination)*.xml' -Recurse | ForEach { 
    $currFile = $_.FullName; 
    (Get-Content $_ | ForEach { 
     $_ -Replace '#OldString#', '$($newString)' 
    }) | Set-Content -Path $currFile; 
} 
+1

안녕하세요, 문제가 무엇인가요? 오류 메시지가 나타 납니까? – sodawillow

+0

오류는 없지만 모든 파일에서 변경 사항이 실제로 발생하지는 않습니다. –

+2

' '$ ($ destination) \ *. xml '' (백 슬래시에주의하십시오.) –

답변

3

실제로 문제는 올바른 디렉토리를 가리키고 있지 않다는 것입니다.

이 명령을 실행하면 : 당신은 작은 따옴표를 사용하는

Get-ChildItem '$($destination)*.xml' -Recurse 

. $($destination)과 같이하려는 것처럼 작은 따옴표는 문자열 확장을 허용하지 않습니다. PowerShell이 ​​이것을 실행하면 $ ($ destination)라는 경로에있는 파일을 실제로 찾고 있습니다.이 파일은 존재하지 않습니다.

대신 큰 따옴표로 바꾸거나 더 좋게 따옴표를 모두 제거하십시오.

Get-ChildItem $destination\*.xml -Recurse 

마지막으로, 당신은 그 문자열의 모든 인스턴스를 대체 할 For-Each 루프를 사용할 필요가 없습니다. Get-Content을 호출 한 다음 replace를 호출하고 마지막으로 값을 한 줄에 모두 설정할 수 있습니다.