使用PowerShell查找路径,而不是文件

使用PowerShell查找路径,而不是文件,powershell,Powershell,我正在试图找到一条路径,以便可以运行命令。我不想查找文件,而是查找完整的文件夹名,包括驱动器号。通常驱动器号的路径不同,因此我需要检查几个不同的驱动器号以找到包含我的文件的文件夹 有时,文件将以相同的名称存在于多个驱动器号位置。这很好,但我需要确定保存每个文件的文件夹。目前,我已经创建了这个丑陋的一行,这是工作,但不完全是我需要的。。。由于不知道怎么做,我创建了一个文件,可以保存在我需要找到的路径上,这样我就可以找到一个目标。。。。此文件名为file.txt get-childItem -pat

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

有时,文件将以相同的名称存在于多个驱动器号位置。这很好,但我需要确定保存每个文件的文件夹。目前,我已经创建了这个丑陋的一行,这是工作,但不完全是我需要的。。。由于不知道怎么做,我创建了一个文件,可以保存在我需要找到的路径上,这样我就可以找到一个目标。。。。此文件名为file.txt

get-childItem -path f:\,g:\,h:\ -recurse -include file.txt 
我运行这个的一些设备不会有所有的驱动器,所以更糟糕的事情接踵而至,我设置了一个变量,并包括一些错误操作,即使找不到驱动器号也要继续

$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

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
    )
)
我在这个网站上看到了一些其他的帖子,但我没有取得多大进展,我失败了。。有更好的办法吗

$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
是的,试试这个:

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

您可以使用获取系统上可用驱动器的阵列。
从中,获取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:
,没有新的反斜杠,因此您可能不知道这一点,但通常通过单击✓ 左边的图标。这将帮助其他有类似问题的人更容易找到它,并有助于激励人们回答你的问题。