【问题标题】:Windows PowerShell - Input file name, output file pathWindows PowerShell - 输入文件名、输出文件路径
【发布时间】:2021-11-25 00:51:48
【问题描述】:

我刚刚开始使用 PowerShell,我有一个任务需要在我输入文件名时让文件路径显示在屏幕上。

是否有允许我执行以下操作的脚本? :

Ex 1:我输入“test.txt”,得到“C:\Program Files....”

Ex 2:我输入了一个文件名“我的文档”,我也得到了它的路径。

我已经在网上搜索了如何执行此操作,但我并没有完全找到我要查找的内容,而且所有查询/答案都太复杂了,我无法理解。

谁能帮帮我,好吗?

提前致谢!

【问题讨论】:

  • 本地文件系统中存在多个名为test.txt的文件怎么办?
  • 也许列出它们的所有路径?

标签: windows powershell file directory path


【解决方案1】:

这是一个适合您的入门示例。

此示例仅在存在的路径范围内搜索 Path 系统环境变量。它也只查找文件,不通过这些路径递归。

因此,您可以直接从命令行访问的任何内容都应该可以通过它访问。

现在,如果您想搜索整个驱动​​器,可以将 $DefaultPaths 分配替换为 Get-ChildItem -Path 'C:' -Recurse,但每次都这样做不会非常有效。

你可以这样做,它会工作......但它会很慢。 要搜索整个驱动​​器或整个文件系统,有一些替代方法可能效果更好。一些可能吸引人的例子:

  • 使用您必须构建和维护的数据库来索引所有文件,以便在搜索时立即获得结果和/或非常快

  • 解析 MFT 表(如果仅使用 Windows / NTFS 文件系统)而不是使用 Get-ChildItem(虽然这不是通过简单的 cmdlet 在本机上可行的)。

  • 依赖第三方软件和接口(例如,Void Tools Everything 搜索引擎已经解析 MFT 并建立了自己的数据库,允许用户通过 Windows NTFS 文件系统即时搜索。它还有自己的 SDK,您可以插入通过 Powershell 进入并立即检索您要查找的内容。需要注意的是,您需要先安装软件才能使该解决方案正常工作。)

示例:搜索 Path 变量中定义的所有路径

# What you are looking for. Accept wildcards characters (*)
$Filter  = 'notepad.exe'

# Get the System Environment Path variable in an array
$DefaultPaths = $env:Path -split ';' 

$Paths =
Foreach ($P in $DefaultPaths) {
 # Search for files matching the specified filter. Ignore errors (often if the path do not exist but is sin the Path)
  $MatchingFiles = Get-ChildItem -Path $P -Filter $Filter -File -ErrorAction SilentlyContinue
  if ($MatchingFiles.count -gt 0) {
       $MatchingFiles.Directory.FullName
  }
}

$Paths | out-string | Write-Host  -ForegroundColor Cyan

Notepad.exe 使用此方法搜索的输出。

C:\Windows\system32
C:\Windows

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-05
    • 1970-01-01
    • 2013-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多