Sam*_*abu 228 powershell powershell-2.0
我在所有文件夹中搜索文件.
Copyforbuild.bat 很多地方都有,我想递归搜索.
$File = "V:\Myfolder\**\*.CopyForbuild.bat"
Run Code Online (Sandbox Code Playgroud)
我怎么能在PowerShell中做到这一点?
Sha*_*evy 374
将Get-ChildItem cmdlet与-Recurse开关一起使用:
Get-ChildItem -Path V:\Myfolder -Filter CopyForbuild.bat -Recurse -ErrorAction SilentlyContinue -Force
Run Code Online (Sandbox Code Playgroud)
Bin*_*e01 32
我使用它来查找文件然后让PowerShell显示结果的整个路径:
dir -Path C:\FolderName -Filter FileName.fileExtension -Recurse | %{$_.FullName}
Run Code Online (Sandbox Code Playgroud)
您始终可以*在FolderName和/或中使用通配符FileName.fileExtension.例如:
dir -Path C:\Folder* -Filter File*.file* -Recurse | %{$_.FullName}
Run Code Online (Sandbox Code Playgroud)
上面的示例将搜索C:\以单词开头的驱动器中的任何文件夹Folder.因此,如果您有一个名为的文件夹FolderFoo,FolderBarPowerShell将显示这两个文件夹的结果.
文件名和文件扩展名也是如此.如果要搜索具有特定扩展名的文件,但不知道文件名,可以使用:
dir -Path C:\FolderName -Filter *.fileExtension -Recurse | %{$_.FullName}
Run Code Online (Sandbox Code Playgroud)
或相反亦然:
dir -Path C:\FolderName -Filter FileName.* -Recurse | %{$_.FullName}
Run Code Online (Sandbox Code Playgroud)
Möt*_*ötz 31
在根据安全性(例如C:\Users)搜索可能出现错误的文件夹时,请使用以下命令:
Get-ChildItem -Path V:\Myfolder -Filter CopyForbuild.bat -Recurse -ErrorAction SilentlyContinue -Force
Run Code Online (Sandbox Code Playgroud)
use*_*020 12
Get-ChildItem V:\MyFolder -name -recurse *.CopyForbuild.bat
Run Code Online (Sandbox Code Playgroud)
也会工作
Asa*_*han 11
这是我在挣扎之后终于想出的方法:
Get-ChildItem -Recurse -Path path/with/wildc*rds/ -Include file.*
Run Code Online (Sandbox Code Playgroud)
要使输出更清晰(仅路径),请使用:
(Get-ChildItem -Recurse -Path path/with/wildc*rds/ -Include file.*).fullname
Run Code Online (Sandbox Code Playgroud)
要仅获得第一个结果,请使用:
(Get-ChildItem -Recurse -Path path/with/wildc*rds/ -Include file.*).fullname | Select -First 1
Run Code Online (Sandbox Code Playgroud)
现在是重要的东西:
要仅搜索文件/目录,请不要使用-File或-Directory(请参阅下面的原因)。而是将其用于文件:
Get-ChildItem -Recurse -Path ./path*/ -Include name* | where {$_.PSIsContainer -eq $false}
Run Code Online (Sandbox Code Playgroud)
并删除-eq $falsefor 目录。千万不能让像一个尾随通配符bin/*。
为什么不使用内置开关?它们很糟糕,会随机删除功能。例如,为了-Include与文件一起使用,您必须以通配符结束路径。但是,这会在-Recurse不告诉您的情况下禁用开关:
Get-ChildItem -File -Recurse -Path ./bin/* -Include *.lib
Run Code Online (Sandbox Code Playgroud)
你会认为这会给你所有*.lib子目录中的所有s,但它只会搜索bin.
为了搜索目录,您可以使用-Directory,但是您必须删除尾部通配符。无论出于何种原因,这都不会停用-Recurse。正是出于这些原因,我建议不要使用内置标志。
您可以大大缩短此命令:
Get-ChildItem -Recurse -Path ./path*/ -Include name* | where {$_.PSIsContainer -eq $false}
Run Code Online (Sandbox Code Playgroud)
变成
gci './path*/' -s -Include 'name*' | where {$_.PSIsContainer -eq $false}
Run Code Online (Sandbox Code Playgroud)
Get-ChildItem 别名为 gci-Path 默认为位置 0,因此您可以创建第一个参数路径-Recurse 别名为 -s-Include 没有速记小智 6
尝试这个:
Get-ChildItem -Path V:\Myfolder -Filter CopyForbuild.bat -Recurse | Where-Object { $_.Attributes -ne "Directory"}
Run Code Online (Sandbox Code Playgroud)
使用通配符过滤:
Get-ChildItem -Filter CopyForBuild* -Include *.bat,*.cmd -Exclude *.old.cmd,*.old.bat -Recurse
Run Code Online (Sandbox Code Playgroud)
使用正则表达式过滤:
Get-ChildItem -Path "V:\Myfolder" -Recurse
| Where-Object { $_.Name -match '\ACopyForBuild\.[(bat)|(cmd)]\Z' }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
287368 次 |
| 最近记录: |