可以将通配符放在文件夹名称掩码中吗?还是需要两次运行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
答案 0 :(得分:1)
Get-ChildItem
在路径中支持通配符,但是通配符仅适用于单个文件夹级别,即模式C:\foo\*\bar
将找到文件夹C:\foo\abc\bar
和C:\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)"