Windows 10 64 位。PowerShell 5.1
使用 PowerShell 5 或 > 更新 zipfile。正在寻找改进的工作代码。
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 gci, regex, $Matches, foreach
{ $_ PadLeft },更新 zip 文件Compress-Archive, and Remove-Item
。平均 29 毫秒 9 个文件 (48KB) 10 次运行 3 个存档。
用于测试清除您的桌面。您的桌面上不应有 .txt 或 .zip 文件。有 3 个Remove-Item
没有-whatif
or -confirm
。制作 9 个文本文件和 3 个 zipfile。工作脚本、测试脚本、带日志文件的脚本。
#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
#
制作测试文件,十个带有日志文件的运行循环:
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 解析多于一个点的文件路径、名称、基本名称。
如何将基本名称解析为第一个点。
如何使用 PadLeft。
如何使用 PowerShell 为字符串添加前导零和结尾零。
使用 PowerShell 5 或更高版本更新 zipfile。gci、get-childitem、regex、正则表达式、正则表达式、$Matches、foreach、管道中的当前项、$_、PadLeft、Compress-Archive 和 Remove-Item。在 10 次运行中,3 个存档中的 9 个文件 (48KB) 平均耗时 29 毫秒。