에 지정되지 않은 파일을 삭제하려면?PowerShell 스크립트는이 같은 텍스트 파일에 파일 이름의 목록이 목록
의사 코드 :
- 는
- 는 파일 이름의 목록을 만듭니다 라인별로 텍스트 파일
- 같이 Recurse 폴더와 그 하위 폴더에 파일 이름이 목록에없는 경우
- , 삭제, 읽기 그것.
에 지정되지 않은 파일을 삭제하려면?PowerShell 스크립트는이 같은 텍스트 파일에 파일 이름의 목록이 목록
의사 코드 :
데이터 :
-- begin exclusions.txt --
a.txt
b.txt
c.txt
-- end --
코드 : 당신이 당신의 결과에 만족하는 경우
# read all exclusions into a string array
$exclusions = Get-Content .\exclusions.txt
dir -rec *.* | Where-Object {
$exclusions -notcontains $_.name } | `
Remove-Item -WhatIf
가 -WhatIf
스위치를 제거합니다.
Get-ChildItem -exclude (gc exclusions.txt) | Remove-Item -whatif
이 방식은 가정 -WhatIf
는 파일이 현재 폴더에 존재하는 경우이 작업을 수행 할 수 있습니다
-Oisin
이 DO (즉이 삭제되지 않습니다) 것이 무엇을 보여줍니다 각 파일은 별도의 행에 있습니다. 파일이 하위 폴더에 있으면 Oisin의 접근 방식을 사용합니다.
예, 파일은 별도의 줄에 있습니다. 답변 주셔서 감사합니다. 부모 위치에 하위 폴더가있는 경우 "Microsoft.PowerShell.Core \ FileSystem :: <
하위 디렉토리가 관련되어 있다면 내 접근 방식을 사용하지 않고 -r을 사용하지 않으려 고합니다. 그렇지 않으면 전체 폴더가 삭제됩니다. –
실제로 이것은 재귀가 아닌 첫 번째 디렉토리에서만 작동하는 것처럼 보입니다. 변경된 스크립트가 올바르게 재귀됩니다.
$exclusions = Get-Content .\exclusions.txt
dir -rec | where-object {-not($exclusions -contains [io.path]::GetFileName($_))} | `
where-object {-not($_ -is [system.IO.directoryInfo])} | remove-item -whatif
[io.path] :: GetFileName ($ _) 대신 $ _. FullName.ToLower()를 사용하고 내 제외 목록에서 전체 경로 이름을 사용하여 재귀가 작동하도록했습니다. – toxaq
나는 그것을 좋아한다. 왜, -notcontains를 사용하지 않을까요? –
감사합니다. 이것은 나를 위해 완벽하게 작동합니다. Mike가 제안한대로 Notcontains를 시도했지만 결과는 동일합니다. – Mrchief
나는 싫어한다. 아니, 농담이야. 그래, 그건 더 간결 해. – x0n