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

时间:2019-07-29 15:31:07

标签: powershell-4.0 get-childitem

可以将通配符放在文件夹名称掩码中吗?还是需要两次运行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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

#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}

哪个返回...

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

答案 2 :(得分:0)

最终,我只是想要这些文件,不确定是否有错字或其他内容,但是现在可以了。我有可能从$folderMask切换到$folderName,或者在$folderMask的末尾没有*。*。

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