使用powershell抓取目录中的特定文件并遍历它们?
问题描述:
我有一个目录,看起来像这样:使用powershell抓取目录中的特定文件并遍历它们?
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文件等。
答
PowerShell的方式是按日期对文件进行分组。所以
- 得到文件
- 检查有8个领先位数
- 构建从第8位计算的属性由新的物业
- 组由新的物业
- 排序
- 进一步处理取决于您计划的步骤。
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:\Test\20171006PBFile.txt; PSParent...
2 20171106 {@{PSPath=Microsoft.PowerShell.Core\FileSystem::X:\Test\20171106PAFile.txt; PSParent...
3 20171206 {@{PSPath=Microsoft.PowerShell.Core\FileSystem::X:\Test\20171206PCFile.txt; PSParent...
答
你可以使用类似:
dir | findstr "20171106" | Foreach-object { $_ }
干杯,
答
尝试这个
$FileNames [email protected]("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
}
+0
这通过'\ foldertoloop'循环并执行文件上的'stuff to do'* .filetype –
你到目前为止尝试过什么?你可以发布你的代码,以便我们可以看到你有什么问题。 –