짧은 답변 :
sp (gc test.txt) IsReadOnly $false
긴 대답
아래 글쎄, 몇 가지이 문제입니다.
$file
은 실제로 파일의 행을 포함하는 string[]
입니다. 따라서 IsReadOnly
속성은 에 string[]
에 적용되며 파일 이름 일 수있는 실제 문자열이 아닌 실제 문자열에 적용됩니다.
그래서 내가 올바르게 이해하고 있으면 각 파일에 다른 파일 이름이 들어있는 파일을 읽으려고합니다. 그리고 해당 파일에 대한 읽기 전용 특성을 지 웁니다.
Get-Content
으로 시작하는 것은 여기에 잘못이 아닙니다. 우리는 확실히 그것을 필요로 할 것입니다 :
$filenames = Get-Content test.txt
이제 우리는 파일 이름 목록을 가지고 있습니다. 파일의 속성에 액세스하려면 해당 파일 이름을 실제 FileInfo
객체로 변환하고 조작해야합니다. 또는 파일 이름을 -Path
인수로 Set-ItemProperty
으로 전달합니다.
먼저 첫 번째 방법을 택한 다음 다른 방법으로 이동합니다. 그래서 우리는 많은 파일 이름을 가지며 그들로부터 FileInfo
개의 객체를 원합니다.
$files = (foreach ($name in $filenames) { Get-Item $name })
그런 다음 파일 이름 전체를 반복하고 그들 각각에 IsReadOnly
속성을 설정할 수 있습니다 :이은 (우리가 목록에있는 모든 파일에 대해이 작업을 수행 할 필요가 있기 때문에)를 foreach
루프를 수행 할 수 있습니다
foreach ($file in $files) {
$file.IsReadOnly = $false
}
길고 귀찮은 변형입니다. PowerShell에 대한 사전 경험이없는 사람들에게 가장 적합한 도구 일 것입니다. 파이프 라인을 사용하면 여러 컬렉션이 누락 될 필요가 줄어 듭니다. 파이프 라인은 개체를 하나의 cmdlet에서 다른 cmdlet으로 전송하며 해당 개체에는 여전히 형식이 있습니다.
그래서 우리는 정확히 같은 결과를 달성하고
Get-Content test.txt | Get-Item | ForEach-Object { $_.IsReadOnly = $false }
을 작성하여. 우리는 파일의 내용을 읽어 들여 string
의 묶음을 얻습니다. 그것들은 Get-Item
으로 전달되며, 파이프 라인 입력으로 무엇을해야하는지 알게됩니다.이 객체는 파일 경로로 처리됩니다. 우리가 여기서 필요한 것.그런 다음 Get-Item
은 FileInfo
개체를 파이프 라인에서 더 내려 보내며이 지점에서 우리는 루프를 끝내고 읽기 전용 속성을 false
으로 설정합니다.
이제는 더 짧았고, 약간의 연습을 거쳐 더 쉬웠습니다. 그러나 그것은 여전히 이상에서 멀어졌습니다. 이전에 말한 것처럼 Set-ItemProperty
을 사용하여 파일의 읽기 전용 속성을 설정할 수 있습니다. Set-ItemProperty
은 -Path
매개 변수의 입력으로 문자열 배열을 취할 수 있다는 장점을 활용할 수 있습니다. Set-ItemProperty
직접 -Path
에 대한 값으로 입력 문자열을 허용하지 않습니다 때문에
$files = Get-Content test.txt
Set-ItemProperty -Path $files -Name IsReadOnly -Value $false
우리는 여기에 임시 변수를 사용하고 있습니다. 그러나 우리는이 임시 변수를 인라인 할 수 있습니다 다음 Get-Content
호출 주위
Set-ItemProperty -Path (Get-Content test.txt) -Name IsReadOnly -Value $false
괄호는이 단일 인수하고 먼저 평가해야한다는 PowerShell을 말할 필요하다.
우리는 다음 이러한 매개 변수의 각 Set-ItemProperty
가 될 것으로 예상 위치에 사용된다는 사실을 이용할 수 있습니다, 그래서 우리는 단지 값으로 매개 변수 이름을 생략하고 충실 할 수
Set-ItemProperty (Get-Content test.txt) IsReadOnly $false
그리고 우리는 그들의 기본 별칭에 cmdlet 이름 줄일 수 있습니다 : 0
가로 변환되기 때문에 우리는 실제로 더 많은 공간을 절약하기 위해 0
로 $false
를 작성할 수
sp (gc test.txt) IsReadOnly $false
을 부울 값으로 사용되는 경우. 그러나 나는 여기서 단축하는 것으로 충분하다고 생각한다.
아, 좋습니다. PSCX를 더 깊이 조사해야 할 것 같습니다. Curently 나는 그들을 Out-Clipboard를 위해 직장에 설치했을뿐입니다. – Joey