使用 powershell 获取目录中的特定文件并遍历它们?

Grab specific files in a directory using powershell and iterate through them?

我有一个如下所示的目录:

20171206PAFile.txt
20171206PBFile.txt
20171206PCFile.txt
20171106PAFile.txt
20171106PBFile.txt
20171006PAFile.txt  
20171006PBFile.txt    

等...

我想获取名称为 20171006 的文件,然后对这些文件执行某些操作,然后以迭代方式移动到名称为 20171106 的下一组文件,依此类推。

并在此过程中将日期部分存储在变量中。

$date = 20171106

有办法吗?

[string]$FolderName = "C:\Users\Test\Desktop\TestDirectory"   

$Item = Get-ChildItem *.txt -Path $FolderName|Sort CreationTime| select -First 1

$test = $Item.Name.Substring(0,8)

我将在处理这些文件时将其移出该目录,这样 20171006 文件将在第一次迭代后消失。然后是20171106个文件等等。

你可以使用类似的东西:

dir | findstr "20171106" | Foreach-object { $_ }

干杯,

试试这个

$FileNames =@("20171106","20171006")
$Path = "C:\"
foreach($FileName in $FileNames){
    $Files = Get-ChildItem -Path $Path -file -Recurse -Include $FileName*
    foreach($File in $Files){
        $File
    }
}

或者试试这个

$Files = @("win", "cmd") | foreach-object{ dir "C:\windows\system32" -Recurse -Include "$_*"} | ?{!$_.psiscontainer}
Foreach($File in $Files){
    $File.FullName
}
Get-ChildItem \folder\to\loop -Recurse -Include *.<filetype> | Foreach-Object{

# stuff to do
}

powerShell 方法是按日期对文件进行分组。所以

  • 获取文件
  • 检查有 8 个前导数字
  • 根据前 8 位
  • 构建计算 属性
  • 按新 属性
  • 排序
  • 按新 属性
  • 分组
  • 进一步处理取决于您计划的步骤。

编辑:有了今天的知识和技能,这更容易了:

> gci [0-9]*.txt | ? BaseName -match '^(\d{8})' | group {$matches[1]} |ft -auto

Count Name     Group
----- ----     -----
    2 20171006 {20171006PAFile.txt, 20171006PBFile.txt}
    2 20171106 {20171106PAFile.txt, 20171106PBFile.txt}
    3 20171206 {20171206PAFile.txt, 20171206PBFile.txt, 20171206PCFile.txt}

Get-ChildItem *.txt|
  Where-Object {$_.Name -match '^\d{8}'}|
  Select-Object *,@{Name='DT';Expression={$_.Name.Substring(0,8)}}|
  Sort-Object DT|
  Group-Object DT|Format-Table -auto

或与别名相同作为一个班轮:

gci *.txt|?{$_.Name -match '^\d{8}'}|select *,@{N='DT';E={$_.Name.Substring(0,8)}}|sort DT|Group DT|ft -auto

示例输出,接下来的步骤可能是迭代组并扩展到文件名。

Count Name     Group
----- ----     -----
    2 20171006 {@{PSPath=Microsoft.PowerShell.Core\FileSystem::X:\Test171006PBFile.txt; PSParent...
    2 20171106 {@{PSPath=Microsoft.PowerShell.Core\FileSystem::X:\Test171106PAFile.txt; PSParent...
    3 20171206 {@{PSPath=Microsoft.PowerShell.Core\FileSystem::X:\Test171206PCFile.txt; PSParent...