Skript, mis arhiveerib etteantud laiendiga failid - PowerShell

From ICO wiki
Jump to navigationJump to search


Lähteülesanne

Loo skript, mis küsib kasutaja käest faililaiendi (näiteks .txt) ja asukoha (ketta või kataloogi) ning pakib kõik sellest kataloogist leitud vastava laiendiga failid .zip arhiiviks failid-aasta-kuu-kp.zip (näiteks failid-2011-01-24.zip)

Argumendid

Antud skript küsib vajalikke parameetreid kasutajalt, argumentidega käsurealt midagi ette sööta ei õnnestu.

Skript

# Add-Zip funktsioon pärineb (paari pisimuudatusega) David Aikeni blogist (MSDN):
# http://blogs.msdn.com/b/daiken/archive/2007/02/12/compress-files-with-windows-powershell-then-package-a-windows-vista-sidebar-gadget.aspx

function Add-Zip
{
	param([string]$zipfilename)
    
	if(-not (test-path($zipfilename)))
	{
		set-content $zipfilename ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18))
		(dir $zipfilename).IsReadOnly = $false	
	}
	
	$zipPackage = (new-object -comobject Shell.Application).NameSpace((dir $zipfilename).FullName)
    
	foreach($file in $input) 
	{ 
            Write-host "Lisame faili:" $file
            $zipPackage.CopyHere($file.FullName)
            Start-sleep -milliseconds 500
	}
}

Write-host "Sisesta laiend: "
$laiend = Read-host
$laiend = $laiend.TrimStart(".")
Write-host "Sisesta kataloog: "
$asukoht = Read-host

$kuupaev = Get-Date -format yyyy-MM-dd
$failinimi = "failid-" + $kuupaev + ".zip"

Write-Host "Arhiiv"$failinimi
get-childitem -recurse $asukoht\*.$laiend | add-zip $failinimi

Teadaolevad kitsaskohad

  • Kõikvõimalikud veasituatsioonid (nt zip faili ei õnnestu ühel või teisel põhjusel luua) on katmata.
  • Kui ühtegi faili ei leita, võiks sellest ka kasutajat teavitada. Praegu jääb mulje, et zip tehakse siiski valmis.