Powershell脚本查找特定的文件/文件名?
到处搜索,但没有运气。我想写一个小脚本来搜索一个确切的文件名,而不仅仅是一个文件名中的字符串。例如,如果我使用资源管理器搜索“主机”,默认情况下会得到多个结果。通过脚本,我只需要我指定的名称。我认为这是可能的?Powershell脚本查找特定的文件/文件名?
我只是真的开始了脚本,它只是为我个人使用,所以它并不重要,它只是窃听我。我有几个驱动器,所以我开始使用2个输入,一个用于查询驱动器盘符,另一个用于指定文件名。我可以通过扩展名,文件大小等进行搜索,但似乎无法将搜索锁定到确切的名称。
任何帮助,将不胜感激!
编辑:感谢所有的回应。只是为了更新。我在我的小脚本中添加了一个答案,并且效果很好。所有三个回应都奏效了,但我最终只能使用一个,其他两个都没有问题。干杯。只是为了澄清,'npp'是Notepad ++在找到文件后打开文件的别名。
$drv = read-host "Choose drive"
$fname = read-host "File name"
$req = dir -Path $drv -r | Where-Object { !$PsIsContainer -and [System.IO.Path]::GetFileNameWithoutExtension($_.Name) -eq $fname }
set-location $req.directory
npp $req
从命令提示符:
gci -recurse -filter "hosts"
只会返回精确匹配文件名的“主机” - 以及我需要提升权限的许多红色邮件( - :
基本上,-filter i我认为,关键是。
Addednum为SteveMustafa指出你现在可以使用 - 文件切换到提供以下递归搜索文件名为“主机”:
gci -recurse -filter "hosts" -File
如果你想避免“访问该路径被拒绝的错误”,那么
gci -recurse -filter "hosts" -file -ErrorAction SilentlyContinue
假设你有一个Z:
驱动器映射:在根
Get-ChildItem -Path "Z:" -Recurse | Where-Object { !$PsIsContainer -and [System.IO.Path]::GetFileNameWithoutExtension($_.Name) -eq "hosts" }
谢谢。详尽的答案,完美的工作。学到了一些东西:) – gavin19 2010-08-07 03:06:13
我用这种形式只是这样的事情:
gci . hosts -r | ? {!$_.PSIsContainer}
.
映射到位置参数Path
和“主机”映射到位置参数Filter
。如果提供程序支持筛选(以及文件系统提供程序),我强烈推荐使用Filter
而不是Include
。这比Include
快得多。
干杯,效果很好。非常感谢先生! – gavin19 2010-08-07 03:09:36
搜索 gdr -PSProvider 'FileSystem' | %{ ls -r $_.root} 2>$null | where { $_.name -eq "httpd.exe" }
我使用基于@Murph回答这个全功能计算机。 它在当前目录内搜索并列出完整路径。
function findit { $filename = $args[0]; gci -recurse -filter "*${filename}*" -file -ErrorAction SilentlyContinue | foreach-object { $place_path = $_.directory echo "${place_path}\${_}" } }
用法示例:findit myfile
啊是的,'-Filter'对此更快。他说他正在寻找文件,所以你需要添加'? {!$ PsIsContainer}'。 – 2010-08-06 22:19:39
谢谢,正是我之后:) – gavin19 2010-08-07 03:08:30
为什么不添加-File开关? – SteveMustafa 2014-06-27 16:08:25