※ ChatGPTを利用し、要約された質問です(原文:Powershellでzip圧縮が出来ない)
Powershellでzip圧縮が出来ない
このQ&Aのポイント
Powershellでzip圧縮が正常にできない現象が発生しています。
Powershell ISEでは圧縮ができるが、コマンドプロンプトでは「圧縮(zip形式)フォルダーエラー」が発生し、圧縮できない。
原因を特定できず、コマンドプロンプトでの圧縮ができるようにしたいです。
Powershellでzip圧縮しようとしているのですが、
・Powershell ISEで実行すると正常に圧縮
・コマンドプロンプトで実行すると、「圧縮(zip形式)フォルダーエラー」が発生し、圧縮できない
という現象が発生しています。コマンドプロンプトで実行できるようにしたいのですが、原因がわからないので、御教示をお願いします。
・環境
Windows XP SP3
Powershell 2.0
・Powershellソース
# 引数チェック
# 引数の数が2以外の時は異常終了
if ($args.Length -ne 2 )
{
write-host "引数エラー"
exit 2;
}
# 圧縮zipファイル名
$ZipFilePath = $Args[0]
# 圧縮対象ファイル名
$TargetItems = $Args[1]
# 圧縮先パス存在チェック
if((Test-Path (Split-Path $ZipFilePath -Parent)) -ne $True){
write-host "圧縮先パスエラー"
exit 3;
}
# 圧縮対象ファイル存在チェック
if((Test-Path ($TargetItems)) -ne $True){
write-host "圧縮対象ファイルエラー"
exit 4;
}
# Zipファイルが存在する場合は削除
if(Test-Path -Path $ZipFilePath)
{
Remove-Item -Path $ZipFilePath
}
# Zipファイル作成
Set-Content $ZipFilePath ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18))
(dir $ZipFilePath).IsReadOnly = $false
# Zipファイルにファイルを投入
$shell = New-Object -com Shell.Application
$zipfile = $shell.NameSpace($ZipFilePath)
$archivedItems = New-Object Collections.ArrayList
# 圧縮対象ファイルの数だけループ
foreach($item in ($TargetItems | %{Get-Item -Path $_}))
{
# ファイルをZipファイルに投入。圧縮処理は非同期なので、その終了を待つ。
$archivedItems.Add($item) | Out-Null
$zipfile.CopyHere($item.FullName)
while($true)
{
if($archivedItems.Count -eq $zipfile.Items().Count)
{
break
}
Start-Sleep -Seconds 1
}
}
write-host "処理終了"
exit 0
お礼
ありがとうございます。 Windows7だと自分のスクリプトで動きますね…。 何故WindowsXPだと駄目なのか…OSの違い? ソースもありがとうございました。