답변:
사용 가져 오기-ChildItem을의 와 cmdlet에 -Recurse
스위치를 :
Get-ChildItem -Path V:\Myfolder -Filter CopyForbuild.bat -Recurse -ErrorAction SilentlyContinue -Force
cd V:\MyFolder
다음ls -r -inc CopyForBuild.bat
ls -r -ea silentlycontinue -fo -inc "filename.txt" | % { $_.fullname }
*
파일 이름 끝에 astric 기호 ( )를 추가하여 부분 문자열을 수행하도록이 답변을 수정했습니다 . ****** LINE1 : $File = "Microsoft.OData.Core.NetFX35.V7*"
LINE2 : $Folder = "C:\Program Files"
LINE3 :Get-ChildItem -Path $Folder -Filter $File -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 -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
속기가 없습니다와일드 카드를 사용하여 필터링 :
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' }
'\ACopyForBuild\.(bat|cmd)\Z'
않습니까?