使用 PowerShell 5 或 > 更新 zipfiles.正在寻找改进的工作代码 [英] Update zipfiles with PowerShell 5 or >. Working code looking for improvement

查看:18
本文介绍了使用 PowerShell 5 或 > 更新 zipfiles.正在寻找改进的工作代码的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Windows 10 64 位.PowerShell 5.1

Windows 10 64-bit. PowerShell 5.1

使用 PowerShell 5 或 > 更新 zipfiles.正在寻找改进的工作代码.

Update zipfiles with PowerShell 5 or >. Working code looking for improvement.

1.1.txt, 1.1.3.txt and 1.txt go in                   FileGroup0000000001.zip
11.txt and 11.1.txt goes in                          FileGroup0000000011.zip 
2.1.3.6.txt, 2.1.3.6.7.txt, 2.1.txt, and 2.txt go in FileGroup0000000002.zip 

使用 PowerShell 5 更新 zipfiles gci、regex、$Matches、foreach {$_ PadLeft}、Compress-Archive 和 Remove-Item.10 次运行平均 29 毫秒 9 个文件 (48KB) 3 个存档.

Update zipfiles with PowerShell 5 gci, regex, $Matches, foreach {$_ PadLeft}, Compress-Archive, and Remove-Item. Avg 29ms 9 files (48KB) 3 archives on ten runs.

为了测试清理你的桌面.您的桌面上不应有 .txt 或 .zip 文件.有 3 个 Remove-Item 没有 -whatif-confirm.制作 9 个文本文件和三个 zip 文件. 工作脚本、测试脚本、带日志文件的脚本.

For testing clear your desktop. There should be no .txt or .zip files on your desktop. There are 3 Remove-Item without -whatif or -confirm. Makes 9 text files and three zipfiles. Working script, test script, script w/ logfile.

#credit stackoverflow.com/a/60666329/8826818
pushd %USERPROFILE%\Desktop 
gci *.txt | where BaseName -match "^(\d+)(\.\d+)*$" | group { $Matches[1] } | foreach {
$dest = 'FileGroup' +  $_.Name.PadLeft(10, "0") + ".zip"
Compress-Archive $_.Group $dest -ea Stop -update
ri $_.Group} 
popd

制作测试文件并测试:

pushd %USERPROFILE%\Desktop 
ni @("1.1.txt", "1.txt", "11.txt", "2.1.3.6.txt", "2.1.txt","2.txt") > $null
gci *.txt | where BaseName -match "^(\d+)(\.\d+)*$" | group { $Matches[1] } | foreach {
$dest = 'FileGroup' +  $_.Name.PadLeft(10, "0") + ".zip"
Compress-Archive $_.Group $dest -ea Stop -update
ri $_.Group} 
ni @("1.1.3.txt", "11.1.txt", "2.1.3.6.7.txt") > $null
gci *.txt | where BaseName -match "^(\d+)(\.\d+)*$" | group { $Matches[1] } | foreach {
$dest = 'FileGroup' +  $_.Name.PadLeft(10, "0") + ".zip"
Compress-Archive $_.Group $dest -ea Stop -update
ri $_.Group}
Read-Host @" 

Delete all FileGroup*.zip is next.
There should be nine files in three archives.
Press enter key to delete all test files
"@
ri FileGroup*.zip
# clear-variable -name ("Matches", "dest")
popd 
#

制作测试文件,十个带有日志文件的运行循环:

Make test files, ten run loop with logfile:

If(test-path logfile031822_030657692.txt) {
cls 
Write-Output "`r`nOverwrite logfile031822_030657692.txt?`r`nPress any key to continue ...    "
cmd /c pause> nul} 
$zcommandpath=$MyInvocation.MyCommand.Path
Write-Output "`r`nThis is $zcommandpath`r`nHow long to archive 9 text files.`r`nStarted: "((get-date).ToString('MM/dd/yy hh:mm:ss.ffff tt') -replace " : ", ":") | out-file -nonewline -append logfile031822_030657692.txt
$times=@()
$watch = New-Object System.Diagnostics.Stopwatch
for ($zdoug=0;$zdoug -lt 10; $zdoug++){
$watch.Start() #put this at start of the loop
ni @("1.1.txt", "1.txt", "11.txt", "2.1.3.6.txt", "2.1.txt","2.txt") > $null
gci *.txt | where BaseName -match "^(\d+)(\.\d+)*$" | group { $Matches[1] } | foreach {
$dest = 'FileGroup' +  $_.Name.PadLeft(10, "0") + ".zip"
Compress-Archive $_.Group $dest -ea Stop -update
ri $_.Group} 
ni @("1.1.3.txt", "11.1.txt", "2.1.3.6.7.txt") > $null
gci *.txt | where BaseName -match "^(\d+)(\.\d+)*$" | group { $Matches[1] } | foreach {
$dest = 'FileGroup' +  $_.Name.PadLeft(10, "0") + ".zip"
Compress-Archive $_.Group $dest -ea Stop -update
ri $_.Group} 
$times += $watch.Elapsed.TotalSeconds #this at the end
$watch.reset() } 
$zLoopFinished=((get-date).ToString('MM/dd/yy hh:mm:ss.ffff tt') -replace " : ", ":") 
# clear-variable -name ("Matches", "dest", "i") 
# BEGIN DEBUG
# Read-Host @" 
# Delete all FileGroup*.zip is next.
# Press enter key to delete all test files
# "@
#END DEBUG 
ri FileGroup*.zip
popd
#
$times | Measure-Object -sum -ave -max -min
$times | Measure-Object -sum -ave -max -min | out-file -append logfile031822_030657692.txt    
Write-Output "Finished:  $zLoopFinished" | out-file -append logfile031822_030657692.txt    
(gc logfile031822_030657692.txt) | Where { $_.Trim(" `t") }  | select-string -pattern "Property :" -notmatch | out-file logfile031822_030657692.txt
#https://devblogs.microsoft.com/scripting/trim-your-strings-with-powershell/
$NewLine = gc logfile031822_030657692.txt | ForEach-Object {
$_ 
if ($_ -match ('^' + [regex]::Escape( 'Finished:' ))){ " " }}
$NewLine | Out-File logfile031822_030657692.txt -Force 
# 

日志文件:

This is 
How long to archive 9 text files.
Started: 03/15/20 02:56:34.4380 PM
Count    : 10
Average  : 0.38522078
Sum      : 3.8522078
Maximum  : 1.6380882
Minimum  : 0.2281335
Finished:  03/15/20 02:56:39.9413 PM    

如何用powershell解析文件路径、名称、basename多于一个点

How to parse file path, name, basename with more than one dot with powershell.

如何将 basename 解析为第一个点.

How to parse basename to first dot.

如何使用 PadLeft.

How to use PadLeft.

如何使用 PowerShell 为字符串添加前导零和结尾零.

How to add leading and ending zeroes to strings with PowerShell.

使用 PowerShell 5 或更高版本更新 zipfile.gci、get-childitem、regex、正则表达式、正则表达式、$Matches、foreach、管道中的当前项目、$_、PadLeft、Compress-Archive 和 Remove-Item.10 次运行中 3 个存档中的 9 个文件 (48KB) 的平均 29 毫秒.

Update zipfiles with PowerShell 5 or greater. gci, get-childitem, regex, regular expression, regular expressions, $Matches, foreach, the current item from the pipe, $_, PadLeft, Compress-Archive, and Remove-Item. Average 29 milliseconds on 9 files (48KB) in 3 archives on ten runs.

推荐答案

使用 Group-Object 来压缩每个组的文件会快一些.

Using Group-Object to compress files for each group is a bit faster.

pushd $env:USERPROFILE\Desktop

ni @(
    "1.1.txt"
    "1.txt"
    "11.txt"
    "2.1.3.6.txt"
    "2.1.txt"
    "2.txt"
) > $null

gci *.txt | where BaseName -match "^(\d+)(\.\d+)*$" | group { $Matches[1] } | foreach {
    $dest = 'FileGroup' +  $_.Name.PadLeft(10, "0") + ".zip"
    Compress-Archive $_.Group $dest -Update -ea Stop
    ri $_.Group
}

Read-Host @" 
Delete all FileGroup*.zip is next.
Press enterkey to delete all test files.
"@

ri FileGroup*.zip
popd

这篇关于使用 PowerShell 5 或 > 更新 zipfiles.正在寻找改进的工作代码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆