PowerShell을 사용한 재귀 파일 검색
모든 폴더에서 파일을 검색하고 있습니다.
Copyforbuild.bat
많은 곳에서 사용할 수 있으며 재귀 적으로 검색하고 싶습니다.
$File = "V:\Myfolder\**\*.CopyForbuild.bat"
PowerShell에서 어떻게 할 수 있습니까?
사용 가져 오기-ChildItem을의 와 cmdlet에 -Recurse
스위치를 :
Get-ChildItem -Path V:\Myfolder -Filter CopyForbuild.bat -Recurse -ErrorAction SilentlyContinue -Force
보안 (예 :)에 따라 오류가 발생할 수있는 폴더를 검색 할 때는 C:\Users
다음 명령을 사용하십시오.
Get-ChildItem -Path V:\Myfolder -Filter CopyForbuild.bat -Recurse -ErrorAction SilentlyContinue -Force
나는 이것을 사용하여 파일을 찾은 다음 PowerShell이 결과의 전체 경로를 표시하게합니다.
dir -Path C:\FolderName -Filter FileName.fileExtension -Recurse | %{$_.FullName}
및 / 또는 *
에서 와일드 카드 를 항상 사용할 수 있습니다 . 예를 들면 다음과 같습니다.FolderName
FileName.fileExtension
dir -Path C:\Folder* -Filter File*.file* -Recurse | %{$_.FullName}
위의 예는 C:\
드라이브에서 단어로 시작 하는 모든 폴더를 검색합니다 Folder
. 따라서 이름이 지정된 폴더가 FolderFoo
있고 FolderBar
PowerShell은 두 폴더 모두의 결과를 표시합니다.
파일 이름과 파일 확장자도 마찬가지입니다. 특정 확장자를 가진 파일을 검색하려고하지만 파일 이름을 모르는 경우 다음을 사용할 수 있습니다.
dir -Path C:\FolderName -Filter *.fileExtension -Recurse | %{$_.FullName}
혹은 그 반대로도:
dir -Path C:\FolderName -Filter FileName.* -Recurse | %{$_.FullName}
Get-ChildItem V:\MyFolder -name -recurse *.CopyForbuild.bat
작동합니다
이 시도:
Get-ChildItem -Path V:\Myfolder -Filter CopyForbuild.bat -Recurse | Where-Object { $_.Attributes -ne "Directory"}
와일드 카드를 사용하여 필터링 :
Get-ChildItem -Filter CopyForBuild* -Include *.bat,*.cmd -Exclude *.old.cmd,*.old.bat -Recurse
정규식을 사용하여 필터링 :
Get-ChildItem -Path "V:\Myfolder" -Recurse
| Where-Object { $_.Name -match '\ACopyForBuild\.[(bat)|(cmd)]\Z' }
다음은 고군분투 한 후에 마침내 생각해 낸 방법입니다.
Get-ChildItem -Recurse -Path path/with/wildc*rds/ -Include file.*
출력을 더 깨끗하게 만들려면 (경로 만) 다음을 사용하십시오.
(Get-ChildItem -Recurse -Path path/with/wildc*rds/ -Include file.*).fullname
첫 번째 결과 만 얻으려면 다음을 사용하십시오.
(Get-ChildItem -Recurse -Path path/with/wildc*rds/ -Include file.*).fullname | Select -First 1
이제 중요한 것들 :
파일 만 검색하려면 / 디렉토리는 않습니다 하지 사용 -File
또는 -Directory
(이유는 아래 참조). 대신 파일에 이것을 사용하십시오.
Get-ChildItem -Recurse -Path ./path*/ -Include name* | where {$_.PSIsContainer -eq $false}
-eq $false
for 디렉토리를 제거하십시오 . 마십시오 하지 같은 후행 와일드 카드를 남겨 bin/*
.
내장 스위치를 사용하지 않는 이유는 무엇입니까? 그들은 끔찍하고 무작위로 기능을 제거합니다. 예를 들어 -Include
파일과 함께 사용 하려면 경로를 와일드 카드로 끝내야합니다. 그러나 이렇게하면 -Recurse
사용자에게 알리지 않고 스위치가 비활성화됩니다 .
Get-ChildItem -File -Recurse -Path ./bin/* -Include *.lib
*.lib
모든 하위 디렉토리의 모든 것을 제공 할 것이라고 생각 하지만 최상위 레벨 만 검색합니다 bin
.
디렉토리를 검색하려면을 사용할 수 -Directory
있지만 후행 와일드 카드를 제거해야합니다. 어떤 이유로 든 비활성화되지 않습니다 -Recurse
. 이러한 이유로 내장 플래그를 사용하지 않는 것이 좋습니다.
이 명령을 상당히 단축 할 수 있습니다.
Get-ChildItem -Recurse -Path ./path*/ -Include name* | where {$_.PSIsContainer -eq $false}
된다
gci './path*/' -s -Include 'name*' | where {$_.PSIsContainer -eq $false}
Get-ChildItem
에 별칭입니다gci
-Path
기본적으로 위치 0으로 설정되므로 첫 번째 인수 경로를 만들 수 있습니다.-Recurse
에 별칭입니다-s
-Include
속기가 없습니다- 이름 / 경로에서 공백에 작은 따옴표를 사용하면 전체 명령을 큰 따옴표로 묶고 명령 프롬프트에서 사용할 수 있습니다. 다른 방법으로 (작은 따옴표로 둘러싼)하면 오류가 발생합니다.
참고 URL : https://stackoverflow.com/questions/8677628/recursive-file-search-using-powershell
'IT story' 카테고리의 다른 글
텍스트 변경 리스너의 안드로이드 (0) | 2020.04.21 |
---|---|
루비에서 구분 된 문자열을 분할하여 배열로 변환하는 방법은 무엇입니까? (0) | 2020.04.21 |
Windows 배치 파일을 사용하여 텍스트 파일의 각 줄을 어떻게 반복합니까? (0) | 2020.04.21 |
HQL에서 제한 쿼리를 어떻게 수행합니까? (0) | 2020.04.21 |
HTML을 회전시키는 방법 (0) | 2020.04.21 |