2011年3月17日木曜日

◆Zipファイル(圧縮ファイル)を作る(改)

ちょっと修正と補足。
17行目はIO.PathクラスのChangeExtensionメソッドを使ったほうがスマートっぽい。

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022

<#
.SYNOPSIS
  Zip圧縮ファイルを作る
.DESCRIPTION
  フォルダーまたはファイルを指定して同一フォルダーにZipファイルを作る
.EXAMPLE
  makezip.ps1 "D:\test"
  makezip.ps1 "D:\test\sample.txt"
#>

param
(
 
[parameter(Mandatory=$true,
    HelpMessage="圧縮したいファイル(フォルダ)のパスを指定してください。")]
   [ValidateScript({Test-Path $_})]
  $target
 
)

$targetobj = Get-Item  $target
#$zipfile = ($targetobj.fullname -replace $targetobj.Extension,"") + ".zip"
$zipfile = [IO.Path]::ChangeExtension($targetobj.fullname, ".zip")
Set-Content $zipfile ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18))
$zip = (new-object -com shell.application).NameSpace($zipfile) 

$zip.CopyHere(
$target)

18行目の("$([char]0)" * 18))は雰囲気で判るとは思うが、Asciiコードがゼロのキャラクター(文字)を18個つなげるって事。

PS>("$([char]0)" * 18) -eq (([char]0).ToString() * 18)
True

0 件のコメント:

コメントを投稿