路径中的 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\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
假设您想要查找 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)"
可以在文件夹名称掩码中放入通配符吗?或者是否需要 运行 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\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
假设您想要查找 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)"