>我有一个根目录,由许多文件夹和子文件夹组成。我需要检查文件夹或子文件夹中是否存在像 *.sln 或 *.designer.vb 这样的特定文件,并将结果输出到文本文件中。
例如:
$root = "C:Root"
$FileType = ".sln",".designer.vb"
文本文件的结果将如下所示:
.sln ---> 2 files
.sln files path ---->
c:RootApplication1subfolder1Test.sln
c:RootApplication2subfolder1Test2.sln
任何帮助将不胜感激!
问候阿希什
试试这个:
function Get-ExtensionCount {
param(
$Root = "C:Root",
$FileType = @(".sln", ".designer.vb"),
$Outfile = "C:Rootrootext.txt"
)
$output = @()
Foreach ($type in $FileType) {
$files = Get-ChildItem $Root -Filter *$type -Recurse | ? { !$_.PSIsContainer }
$output += "$type ---> $($files.Count) files"
foreach ($file in $files) {
$output += $file.FullName
}
}
$output | Set-Content $Outfile
}
我把它变成了一个函数,你的值作为默认参数值。使用 调用它
Get-ExtensionCount #for default values
或
Get-ExtensionCount -Root "d:test" -FileType ".txt", ".bmp" -Outfile "D:output.txt"
输出保存到文件,例如:
.txt ---> 3 files
D:Testas.txt
D:Testddddd.txt
D:Testsss.txt
.bmp ---> 2 files
D:Testdsadsa.bmp
D:TestNew Bitmap Image.bmp
若要在开始时获取所有文件计数,请尝试:
function Get-ExtensionCount {
param(
$Root = "C:Root",
$FileType = @(".sln", ".designer.vb"),
$Outfile = "C:Rootrootext.txt"
)
#Filecount per type
$header = @()
#All the filepaths
$filelist = @()
Foreach ($type in $FileType) {
$files = Get-ChildItem $Root -Filter *$type -Recurse | ? { !$_.PSIsContainer }
$header += "$type ---> $($files.Count) files"
foreach ($file in $files) {
$filelist += $file.FullName
}
}
#Collect to single output
$output = @($header, $filelist)
$output | Set-Content $Outfile
}
下面是一个单行代码,用于确定目录中是否存在至少一个扩展名为 .txt 或 .ps1 的文件$OutputPath:
(Get-ChildItem -Path $OutputPath -force | Where-Object Extension -in ('.txt','.ps1') | Measure-Object).Count
说明:该命令告诉您指定目录中与任何列出的扩展名匹配的文件数。您可以将-ne 0
附加到末尾,这将返回 true 或 false 以在 if 块中使用。
这将在目录$root
及其子目录中搜索 $FileType
类型的文件,包括隐藏文件和排除目录:
$root = "C:Root";
$FileType = "*.sln", "*.designer.vb";
$results = Get-ChildItem -Path $root -Force -Recurse `
| Where-Object {
if ($_ -isnot [System.IO.DirectoryInfo])
{
foreach ($pattern in $FileType)
{
if ($_.Name -like $pattern)
{
return $true;
}
}
}
return $false;
}
请注意,我已经修改了 $FileType
中的字符串,将其格式化为通配符模式。 然后按扩展名对文件进行分组:
$resultGroups = $results | Group-Object -Property 'Extension';
然后遍历每个组并打印文件计数和路径:
foreach ($group in $resultGroups)
{
# $group.Count: The number of files with that extension
# $group.Group: A collection of FileInfo objects
# $group.Name: The file extension with leading period
Write-Host "$($group.Name) ---> $($group.Count) files";
Write-Host "$($group.Name) files path ---->";
foreach ($file in $group.Group)
{
Write-Host $file.FullName;
}
}
若要将结果写入文件而不是控制台,请使用 Out-File
cmdlet 而不是Write-Host
cmdlet。