路径中的 Powershell Get-ChildItem 通配符?

Powershell Get-ChildItem wildcard in path?

可以在文件夹名称掩码中放入通配符吗?或者是否需要 运行 Get-ChildItem 两次,一次用于目录,第二次用于路径?即使使用下面的代码,我也没有返回任何目录。

我认为 this post 展示了如何使用旧语法来实现:

$folderName = "c:\BizTalk\Vendors\*\AS2FilesReceived\"
$folderMask = "$folderName\*.*" 
$dirs = Get-ChildItem -Path $folderName -Recurse -Directory 
Write-Host "Number of Matching Directories = $($dirs.Count)" 
$dirs 

#$files = $dirs | %{ Get-ChildItem -Path $folderMask -Filter "*.*" -Exclude "*997*.*" -File}  | Where-Object {$_.CreationTime -gt (Get-Date).AddDays(-6)} | Sort-Object LastWriteTime -Descending

Get-ChildItem 支持路径中的通配符,但通配符仅适用于单个文件夹级别,即模式 C:\foo\*\bar 将找到文件夹 C:\foo\abc\barC:\foo\xyz\bar,但找不到文件夹 C:\foo\abc\xyz\bar。对于后者,你需要这样的东西:

Get-ChildItem 'C:\foo' -Filter 'bar' -Directory -Recurse

如果您只有一个可变文件夹级别并且只需要来自给定路径的文件(没有递归),您可以这样做:

Get-ChildItem 'C:\foo\*\bar\*' -File

如果您还想要 bar 下面的子文件夹中的所有文件,请使用:

Get-ChildItem 'C:\foo\*\bar' -File -Recurse

假设您想要查找 Vendors 下每个文件夹的所有 AS2FilesReceived 目录中的所有文件并 return 信息,那么这可能对您有所帮助...

#Find all AS2FilesReceived directories
$dirs= Get-ChildItem -Path 'C:\BizTalk\Vendors\*\AS2FilesReceived\' -Directory

#Return number of directories
"$($dirs.Count) directories found"

#Return list of directory names
$dirs | % {$_.Parent.Name}

#Return the full name of every text file under each directory
$dirs | % {Get-ChildItem -Path $_ *.txt} | % {$_.FullName}

哪个 return...

3 directories found
Vendor1
Vendor2
Vendor3
C:\BizTalk\Vendors\Vendor1\AS2FilesReceived\Vendor1AS2File.txt
C:\BizTalk\Vendors\Vendor2\AS2FilesReceived\Vendor2AS2File.txt
C:\BizTalk\Vendors\Vendor3\AS2FilesReceived\Vendor3AS2File.txt

最终,我只想要这些文件,不确定是不是打错了还是怎么的,但现在可以了。可能我从 $folderMask 切换到 $folderName,或者 $folderMask.

末尾没有 *.*
$folderMask = "c:\BizTalk\Vendors\*\AS2FilesReceived\*.*"
$files = Get-ChildItem -Path $folderMask -File  
Write-Host "Number of Matching Files = $($files.Count)"