トップ回答者
powershellによる大容量データのzip圧縮について

質問
-
powershellにて、以下サンプルソースのような開発をしたのですが、
大容量ファイルを圧縮した場合、まだ一個目のファイルの圧縮が完了していない段階で、
次の圧縮に進んでしまう現象が発生しました。そこでスリープ時間を、100秒など長くするとうまく行ったのですが、
複数ファイルがある場合、必ず100秒×ファイル数分待つ必要が出てしまいます。そうではなく、確実に1つ目のファイルのZIP圧縮が終わったことを取得し、
次に進みたいのですが、そのようなことは可能でしょうか。
for($answer=[System.Windows.Forms.DialogResult]::Yes;$answer -eq [System.Windows.Forms.DialogResult]::Yes;){
$zFolderItem=$zFolder.ParseName($File);
if(-not $zFolderItem){
$Count=$zFolder.Items().Count;
$zFolder.CopyHere($sFolderItem);
while($zFolder.Items().Count -eq $Count){
Start-sleep -milliseconds 1000;
}
break;
}else{
$answer = [System.Windows.Forms.MessageBox]::Show("このフォルダには既に次のファイルが存在します:`n`n" + '"' + $File + '"' +"`n`n既存のファイルと置き換えますか?", "ファイル置換の確認", [System.Windows.Forms.MessageBoxButtons]::YesNoCancel, [System.Windows.Forms.MessageBoxIcon]::Question)
if($answer -eq [System.Windows.Forms.DialogResult]::Yes){$zFolderItem.InvokeVerb("delete");}
}
}- 移動 星 睦美 2014年8月18日 5:45 SQL Server から
回答
すべての返信
-
# オペレーターさんへ、PowerShellフォーラムに移動してください。
対象としているPowerShellのバージョンはいくつでしょうか? PSVersion 3.0以降の場合、CLRVersion 4系となります。そして.NET Framework 4.5がインストールされている環境では、ZipArchiveクラスなどが使えます。挙げられているコードのようなExplorer経由で操作するのではなく直接Zipファイルを操作できるようになるのでスリープ処理も不要になります。
-
フォーラム オペレーターの星 睦美です。
スレッドをWindows PowerShell フォーラムに移動させていただきました。
※役立つ回答には、投稿者からの[回答としてマーク] をお願いします。フォーラム オペレーター 星 睦美 - MSDN Community Support