나는 다음과 같은 스크립트가에 -replace 및 Set-내용에 대한 파일 IO를 결합합니다. 그런 다음 동일한 파일을 사용하고 대체 파일을 다시 저장합니다. 그런 다음 한 번 더합니다.PowerShell을
이 방법은 효과가 있지만 비효율적입니다.
바꾸기를 한 번하고 파일을 한 번 저장하는 방법이 있습니까?
(가능하면, 내가 PowerShell을의 읽을 스타일을 유지하는 것을 선호합니다.)
가나는 다음과 같은 스크립트가에 -replace 및 Set-내용에 대한 파일 IO를 결합합니다. 그런 다음 동일한 파일을 사용하고 대체 파일을 다시 저장합니다. 그런 다음 한 번 더합니다.PowerShell을
이 방법은 효과가 있지만 비효율적입니다.
바꾸기를 한 번하고 파일을 한 번 저장하는 방법이 있습니까?
(가능하면, 내가 PowerShell을의 읽을 스타일을 유지하는 것을 선호합니다.)
가물론, 단지 ForEach-Object
블록 안에 당신을 대체 체인이 수행 할 수 있습니다
$allFiles = Get-ChildItem "./" -Recurse | Where { ($_.Extension -eq ".ts")}
foreach($file in $allFiles)
{
(Get-Content $file.PSPath) |
Foreach-Object {
# Find and replace the dash cased the contents of the files
$_ -replace "my-project-name", '$appNameDashCased$' `
-replace "MyProjectName", '$appNameCamelCased$' `
-replace "myProjectName", '$appNamePascalCased$'
} |
Set-Content $file.PSPath
}
을하고있다 실제로 당신이하고있는 것보다 훨씬 간단합니다. -Replace
명령을 다음과 같이 연결할 수 있습니다.
TheMadTechnician의 답변에 투표가 있습니다. 당신의 코드를 보았을 때 다른 것들 : 첫 줄은 어색하다 :'. /'는 리눅스를 '여기'로두고 있으므로, Get-ChildItem은 현재 경로 (그리고 현재의 PS 드라이브)를 지정하지 않으면 그것을 가정한다. . Where-Object에 출력을 파이핑하지만이 명령에서는 명령에 필터링 기능이 내장되어 있으므로 비효율적입니다. 또한, 사용했던 where-object 절로 괄호 안에 중괄호가 있습니다. 괄호는 불필요합니다. '$ allFiles = Get-ChildItem -recurse -Include "* .ts"'. Get-Content의 경우 $ file 객체 만 사용할 수 있습니다. 'Get-Content $ file' – Xalorous