【问题标题】:find path, not file using PowerShell使用 PowerShell 查找路径,而不是文件
【发布时间】:2020-07-09 20:20:50
【问题描述】:

我正在尝试找到一个路径,以便我可以运行一个命令。我不想查找文件,而是查找完整的文件夹名称,包括驱动器号。通常路径驱动器号会有所不同,因此我需要检查几个不同的驱动器号才能找到包含我的文件的文件夹。

有时该文件会以相同的名称存在于多个驱动器号位置。这很好,但我需要确定每个保存的文件夹。目前我已经创建了这个丑陋的单线,它可以工作,但不完全是我需要的......由于缺乏弄清楚如何去做,我创建了一个文件,我可以将它保存在我需要找到的路径中,所以我可以有一个目标来寻找....这个文件被命名为file.txt

get-childItem -path f:\,g:\,h:\ -recurse -include file.txt 

我运行它的一些设备不会拥有所有驱动器,因此会出现更多丑陋,我设置了一个变量并包含一些 -erroraction 以继续,即使未找到驱动器号...

$path= Get-ChildItem -Path f:\, g:\, h:\ -Recurse -Include file.txt -ErrorAction SilentlyContinue

我确信必须有一种更优雅的方式来实现目标......我真的只是想找到一个包含一些特定文件名的文件夹的路径,而不管驱动器号是什么。我不必拥有 file.txt 或任何此代码。我只是想解决这个问题并学习使用 PowerShell 的最佳方法。我有一个不错的批处理脚本来做,但我正在尝试用纯 PowerShell 重写它。

FOR %%i IN (C D E F G H I J K L N M O P Q R S T U V W X Y Z) DO (
    IF EXIST %%i:\scripts\file.txt (
        ECHO Script found at %%i
    )
)

这个批处理版本效果很好,我可以运行我的命令并引用 %%i 变量作为找到我的文件的路径...但我想将它重构到 PowerShell 中。

我在这个网站上看到了一些其他线程,但我没有取得太大进展而且我失败了。有没有更好的方法?

$Drives = "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"
foreach ($Drive in $Drives) {
   if (Test-Path "${Drive}:\file.txt") {
       $FileLocation = $Drive
   }
}

Write-Host $FileLocation

【问题讨论】:

    标签: powershell


    【解决方案1】:

    您可以使用[System.IO.DriveInfo]::GetDrives() 获取系统上的可用驱动器阵列。
    由此,您获取 Name 属性并遍历驱动器:

    [System.IO.DriveInfo]::GetDrives().Name | ForEach-Object {
        (Get-ChildItem -Path $_ -Filter 'file.txt' -Recurse -File -ErrorAction SilentlyContinue).DirectoryName
    }
    

    如果你愿意,当然可以捕获返回的目录路径:

    $paths = [System.IO.DriveInfo]::GetDrives().Name | ...
    

    另一种检索可用驱动器的方法是使用 WMI 或 CIM:(Get-CimInstance -ClassName Win32_logicaldisk).DeviceID,但请记住,返回的驱动器号格式为 C:没有反斜杠

    【讨论】:

      【解决方案2】:

      是的,试试这个:

      67..90|%{[char]$_}|%{if(test-path "$($_):\file.txt"){$FileLocation=$_}}
      write-host $FileLocation
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-29
        • 2013-03-31
        • 2020-10-13
        • 1970-01-01
        • 2022-01-06
        • 1970-01-01
        • 1970-01-01
        • 2017-02-11
        相关资源
        最近更新 更多