Powershellでzip圧縮が出来ない

このQ&Aのポイント
  • Powershellでzip圧縮が正常にできない現象が発生しています。
  • Powershell ISEでは圧縮ができるが、コマンドプロンプトでは「圧縮(zip形式)フォルダーエラー」が発生し、圧縮できない。
  • 原因を特定できず、コマンドプロンプトでの圧縮ができるようにしたいです。
回答を見る
  • ベストアンサー

Powershellで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

質問者が選んだベストアンサー

  • ベストアンサー
  • sholmes
  • ベストアンサー率81% (89/109)
回答No.1

変数名やコメント等大体同じようなので、下記ページのものを改変された感じでしょうか http://memo-space.blogspot.com/2010/01/powershellzip.html 引数1が固めたいzipファイル名で、それ以降に圧縮対象ファイルのパス書く感じですよね ISEで試していないんですが、cmdだとうまく行ったりいかなかったりという感じじゃ無いでしょうか ざっと見る限り最後の待ち部分に問題ありそうな気がしましたけど、自分も不慣れなものでどこがとはぱっとわからなかったです。 自分の勉強がてら書いてみたら動いたっぽいので、一応貼っておきますね ある程度相対パスへ対処できるように等なってるかもしれません。 確認OSはWin7です。 http://ideone.com/l19NY

door_to_tomorrow
質問者

お礼

ありがとうございます。 Windows7だと自分のスクリプトで動きますね…。 何故WindowsXPだと駄目なのか…OSの違い? ソースもありがとうございました。

関連するQ&A

  • PowerShellで連続zip圧縮する際のエラー

     バッチでpowershellを使って複数ファイルを連続してzip圧縮する際、「test's.txt」のような「'」を含むファイル名でエラーが発生して困っています。  ネットで調べた限り、「LiteralPath」で指定するとか、「`」でエスケープする等を試したのですが、当方はVBAを多少たしなむ程度のど素人なので、解決に至りませんでした。  発生するエラーは、次のとおりです。 ___________________________ compress-archive : パス 's.txt -DestinationPath D:\Users\ーー\Desktop' が存在しないか、または有効なファイル システム パ スではありません。 発生場所 行:1 文字:1 + compress-archive -Path 'D:\Users\ーー\Desktop\test's.txt' -Destinatio ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (s.txt -Destinat...rs\ーー\Desktop:String) [Compress-Archive]、InvalidOp erationException + FullyQualifiedErrorId : ArchiveCmdletPathNotFound,Compress-Archive ___________________________  スペシャリストの方、解決策をご教示よろしくお願いいたします。  以下、当方がネット情報を参考に作成したバッチの記述です。 ___________________________ @echo off setlocal :label_top rem 引数がない場合は最後に飛んで終了する if "%~1"=="" ( goto :label_bottom ) rem 圧縮前ファイル set str_file=%~1 echo %str_file:'=`'% rem 圧縮後ファイル set str_zipfile=%str_file%.zip echo %str_zipfile:'=`'% rem zip圧縮実行 powershell compress-archive -LiteralPath '%str_file%' -DestinationPath '%str_zipfile%' -Force echo %str_zipfile% rem 引数をシフトし、最初に戻る shift goto :label_top :label_bottom echo 処理を終了しました endlocal pause

  • Powershellのparamについて

    Powershellについて質問いたします。 自分で確かめた限りですが、paramとargsは同時に使用できないのでしょうか? 使用の仕方は $args.length param($引数1,$引数2.$引数3) といった形で、paramの前にargs定義があると下記のエラーがでて 用語 'param' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。名前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してください。 逆にparamがargsの前にあると値が取れていないみたいです。(args.lengthの値が0) Paramでlengthのようなことができればいいのですが。

  • powershellの配列について

    すみませんが、powershellの配列について、困っていることがあります。 下記に教えていただければと思います。 【やりたいこと】 スペースがバラバラに入っているファイルの中身を配列に格納したい。 その際、スペースを省いて数字のみ配列に入れたい 【今の状態】 > $test4 = $(Get-Content -path "C:\a.txt") > echo $test4 1 2 3 4 5 6 7 89 > write-host $test4[0] 1 > write-host $test4[1] (スペースが認識されてしまう) > write-host $test4[2] 2 【望む結果】 $test4にファイルの中身を格納する。 その後、以下の結果にしたい。 > write-host $test4[0] 1 > write-host $test4[1] 2 > write-host $test4[7] 89

  • PythonでZIP中のZIPを操作する方法

    【PythonでZIPファイル中のZIPファイルを操作したい】 PythonでZIP内のZIPを再帰的に探して操作したいと考えています。 スクリプトを書いてみたのですが、どうもうまくいきません。 どなたかマズところをご教示いただけないでしょうか? 以下のような構造のデータファイルを用意しました。   SampleZip1.zip     Sample1.txt     Sample2.txt     SampleZip1-1.zip       Sample1-1-1.txt       Sample1-1-2.txt     SampleZip1-2.zip       Sample1-2-1.txt       Sample1-2-2.txt 以下がテストスクリプトです。   import zipfile      def listZipFile( fileName, indent ) :   if not zipfile.is_zipfile( fileName ) :     print( "not zip" + indent + fileName )   return      print( "zip" + indent + fileName )      zip = zipfile.ZipFile( fileName, 'r' )      for f in zip.namelist():     listZipFile( f, "¥t"+ indent )      zip.close()      zipFileName = 'SampleZip1.zip'   listZipFile( zipFileName, "¥t" ) が、結果は以下の通りで、ZIPの中のZIPをZIPファイルと判定してくれないみたいです。   >findZip.py   zip SampleZip1.zip   not zip SampleZip1-2.zip   not zip Sample1.txt   not zip Sample2.txt   not zip SampleZip1-1.zip ZIPファイル中のファイルに対してzipfile.ZipFile()を使うのは無理があるのかなぁ? 一時ファイルにでもいったん出さないとダメ? などと想像しているのですが・・・ どなたかよろしくお願いいたします。

  • powershellの変数の扱い方

    cmdshell(bat)からpowershell(ps1)に移行しようと勉強しているものです。 ごく初歩的なことだと思うのですが、わからないので質問します。 環境はWindows8.1、PowerShell ISEを使用しています。 下記のように引数を実行ファイルに渡すと、渡したファイルが操作されます。 ------------------------------- D:\...\abc.exe $Args ------------------------------- これであれば正常に機能するのですが、 ------------------------------- $abc = "D:\...\abc.exe" $abc $Args ------------------------------- とするとエラーになってしまいます。 これは一体なぜなのでしょうか。 解決方法をご教授願いたいと思います。よろしくお願いします。

  • PowershellでExcelの値を取得したい

    PowershellでExcelの値を取得したい こんにちは。Powershellを勉強しています。 Excelを開いて、セルの値を読み取って、合計値を出力したいと思っています。 Excelファイルの A1に10 B1に50 が入力されています。 その上が下記のコードを書きました。 $path = "C:\\Book1.xlsx" $Excel = New-Object -ComObject Excel.Application $Excel.Visible = $TRUE $Book = $Excel.Workbooks.Open($path) $Sheet = $Book.Worksheets.Item("Sheet1") $CellValue1 += $Sheet.Cells.Item(1,1).Text #10が入っている $CellValue2 += $Sheet.Cells.Item(1,2).Text #50が入っている $Values = $CellValue1 + $CellValue2 Write-Host $Values $Book.Close() $Excel.Quit() 実行すると、なぜか CellValue1に「10101010」という値が入ってしまっています。 CellValue2に「5050」という値が入っています。 Write-Host $Valuesを行うと、101010105050 という値が出力されてしまいます。 出力したい結果は「60」なのですが、目的と違った値が出力されてしまうのは何故でしょうか?

  • 圧縮(Zip)について

    ■C/C++とWIN32APIでAPP作成しています。 ■圧縮(Zip)プログラムの作成に挑戦しています。 「質問」 ■int WINAPI ZIP()の使い方が分かりません ・特に第2引数のコマンドライン文字列の使用方法が分かりません。 ・文字列の先頭に[-r]の有る物、無のサンプルソース。 ・圧縮前のファイル名(フルパス)と圧縮後のファイル名(フルパス)をlstrcatさせたサンプルアイル ■何種類か有る様ですが、ネット探しますが、説明HPが見つかりません。 ■日本語で記載された、関係HPも含めて御教示下さい。

  • 圧縮ファイル 解凍 パス zipの中身

    自分はzip(やlzh)のファイルを解凍する前に、中身を確認できるツールを前に使ったことがあるのですが、ツール名を忘れてしまいました。もしできるものあれば教えてください。また、パスのついたzipファイルなども中身は確認できるでしょうか?また、確認できる場合、パス付きzipを更にパス付きzipで圧縮したりしても見れるでしょうか?また、そのパス付きzipの中にあるファイルのファイル名の確認は普通に解凍したときにも(1つずつファイルの確認がありその都度パス要求されるので)できてしまいますが、自分はパス付きzipの中に更にパス付きzipで圧縮したものの中にあるファイルのファイル名は確認できないようにしたいのですが、(パス付き)zipファイルの中身を確認できるツールでは、パス付きzipの中に更にパス付きzipで圧縮したものの中にあるファイルのファイル名は確認できないでしょうか?ややこしくてすみません‥。 Zipマル見え http://www.vector.co.jp/soft/dl/winnt/util/se407356.html http://www.vector.co.jp/download/file/winnt/util/fh409821.html は前使ったのではありませんが、パスのついたファイルもついてないファイルもエラーがでてダメでした。 Pika Zip http://www.vector.co.jp/soft/win95/util/se078535.html http://www.vector.co.jp/download/file/win95/util/fh227817.html は 「(半角数字3文字)+(半角英語8文字)+(半角数字4文字)」の15文字 のパスワードの付いたzipファイルはまず解読は無理でしょうか?作業しっぱなしにしても数日掛かかるでしょうか? また、パスは「.」とか「(」とか全角文字とか使ったほうがいいでしょうか? 「.(あ」とかのパスにしたら、オプションとかいろいろ弄ってこれに適した設定で解読している必要があり、解読は難しいですよね。 また、圧縮解凍ツールのLhaplusの製作者などは、Lhaplusでパスを付けたzipファイル自身にもそのパスの暗号化されている情報が含まれているので、どんなに難しいパスでzip圧縮したとしても、パスを簡単に解読できたりするのでしょうか?

  • PowerShell7で圧縮したファイル名文字化け

    PowerShell7で圧縮したファイル名が文字化けします。 siftjisとutf8の絡みだろうとは思いますが、回避方法が分かりません。 『C:\test\folder1』の中身を全て『C:\test\File_yyyyMMdd-hhmmss.zip』というファイルに圧縮するスクリプトが以下。 $STR_DATE=Get-Date -Format "yyyyMMdd-HHmmss" $FPF_ZIP="C:\test\File_" + $STR_DATE + ".zip" Compress-Archive -Path C:\Test\folder1\*.* -DestinationPath $FPF_ZIP 『C:\test\folder1』の中身にか下記のファイルが入っています。 新しいテキスト ドキュメント.txt 新規 OpenDocument 表計算.ods 圧縮して、それを解凍したらファイル名が文字化けします。 譁ー縺励>繝・く繧ケ繝・繝峨く繝・繝。繝ウ繝・txt 譁ー隕・OpenDocument 陦ィ險育ョ・ods これを回避する方法を教えてください。

  • 圧縮したZIPファイルが開けません。

    圧縮したZIPファイルにPDFを移動して開こうとしたらカーソルが少しの間回りピンポーンとなり開けません、なお昨日は開けました。パスはないです。解凍ソフトで解凍しても同じくピンポーンとなり解凍できません。原因と どうすれば開けるか教えてください。 WINDOWS10proです。よろしくお願い致します。

専門家に質問してみよう