Windows 10 64-бит. PowerShell 5.1
Обновление zip-файлов с помощью PowerShell 5 или>. Рабочий код ищет улучшения.
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
Обновление zip-файлов с помощью PowerShell 5 gci, regex, $Matches, foreach
{ $ _ PadLeft }, Compress-Archive, and Remove-Item
. Avg 29ms 9 файлов (48 КБ) 3 архива за десять прогонов.
Для тестирования очистите свой рабочий стол. На рабочем столе не должно быть файлов .txt или .zip. Есть 3 Remove-Item
без -whatif
или -confirm
. Делает 9 текстовых файлов и три zip-файла. Рабочий скрипт, тестовый скрипт, скрипт с лог-файлом.
#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
#
Создание тестовых файлов, десять запусков l oop с журнальным файлом:
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
#
LogFile:
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.
Обновление zip-файлов с помощью PowerShell 5 или больше gci, get-childitem, regex, регулярное выражение, регулярные выражения, $ Matches, foreach, текущий элемент из канала, $ _, PadLeft, Compress-Archive и Remove-Item. В среднем 29 миллисекунд на 9 файлов (48 КБ) в 3 архивах за десять прогонов.