VBSを使ってzipファイルを解凍する方法とは?

このQ&Aのポイント
  • VBSを使ってzipファイルを解凍する方法について詳しく解説します。
  • 解凍したファイルの名前を統一する方法や任意の名前で解凍する方法についても紹介します。
  • VBSを利用してzipファイルの解凍を行い、ファイル名の管理をよりスマートにする方法について理解しておきましょう。
回答を見る
  • ベストアンサー

VBS 任意の名前でzip内のファイルを解凍したい

VBSを使ってzipファイルの解凍を行う際に、解凍ファイルを任意の名前にしたいです。 現在以下の内容のvbsでzipファイルを解凍しています。 --------------------------------------------------------------- zippath = "C:\新しいフォルダー\test.zip" savepath = "C:\新しいフォルダー" Set objShell = CreateObject("Shell.Application") Set FilesInZip = objShell.NameSpace(zippath).items Set objFolder = objShell.NameSpace(savepath) If (Not objFolder Is Nothing) Then objFolder.CopyHere FilesInZip, FOF_NOCONFIRMATION + FOF_SILENT End If --------------------------------------------------------------- 解凍自体は上手くいってるのですが、解凍したファイルの名前が統一されていない為、次の処理でスマートにファイルの指定ができません。 このファイル名を、 ・zipファイルと同じ名前(例えば「test.zip」なら「test.xlsx」など)にする。 ・任意の名前で解凍する。 ことは出来ないでしょうか。 ご回答よろしくお願いします

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

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.2

>解凍されるファイル(zipの中身)の名前は実行する度に変わり zipの中身のファイル名 = FilesInZip.Item(0).Name でファイル名を取得できませんか

sahksas
質問者

お礼

無事解決することができました! 解凍するときに新しい名前を指定するのではなく、 zip内のファイル名を取得して、解凍後に名前を変更するんですね。 最終的にこのようなコードになりました↓ --------------------------------------------------------------- zippath = "C:\新しいフォルダー\test.zip" savepath = "C:\新しいフォルダー" Set objShell = CreateObject("Shell.Application") Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") Set FilesInZip = objShell.NameSpace(zippath).items Set objFolder = objShell.NameSpace(savepath) 'zip内のファイル名取得 FileName = FilesInZip.Item(0).Name '解凍 If (Not objFolder Is Nothing) Then objFolder.CopyHere FilesInZip, FOF_NOCONFIRMATION + FOF_SILENT End If '解凍したファイル名変更 objFSO.MoveFile savepath&"\"&FileName,savepath&"\解凍ファイル.xlsx" --------------------------------------------------------------- 回答して頂いた皆さん、 ありがとうございます!

その他の回答 (1)

  • ballville
  • ベストアンサー率47% (233/487)
回答No.1

解凍までできているようなので、あとはリネームすればいい。 ファイル名変更など、ファイル操作には FileSystemObjectを使えばいいです。 set objFSO = CreateObject("Scripting.FileSystemObject") objFSO.MoveFile("元の名前","新しい名前")

sahksas
質問者

お礼

回答ありがとうございます(*^^*)

sahksas
質問者

補足

失礼しました、言葉がまりませんでした。 解凍されるファイル(zipの中身)の名前は実行する度に変わり、解凍するまで分かりません… その名前を毎回統一性のあるものに変更できたらなあ。という話でした。 これは難しいですかね…?

関連するQ&A

  • vbsでZIPファイルを特定のフォルダへ。その1

    http://d.hatena.ne.jp/haradago/20150402/p1 を参考に VBSでZIPファイルを特定のフォルダへ解凍しようとしているところです。 以下の記述の意味がわからないので解説お願いします。 --------------------------------------------------- '解凍するZIPファイル DIR_SOURCE = "C:\Users\a\Desktop\aaa.zip" '解凍先 DIR_DEST = "C:\Users\a\Desktop\解凍先" '定数 Const FOF_SILENT = &H04 '進捗ダイアログを表示しない。 Const FOF_NOCONFIRMATION = &H10 '上書き確認ダイアログを表示しない([すべて上書き]と同じ)。 'オブジェクト生成 Set objShell = CreateObject("Shell.Application") Set FilesInZip = objShell.NameSpace(DIR_SOURCE).items Set objFolder = objShell.NameSpace(DIR_DEST) '解凍 If (Not objFolder Is Nothing) Then objFolder.CopyHere FilesInZip, FOF_NOCONFIRMATION + FOF_SILENT End If msgbox "解凍がおわったよ" ----------------------------------------------------------- 上記のVBSを実行すると デスクトップ上に ある aaa.zip が 解凍先 という名のフォルダのなかに 解凍されます。 「解凍がおわったよ」というメッセージも表示されます。 なぜ動くのかがわからないです。 ------------------------------- 'オブジェクト生成 Set objShell = CreateObject("Shell.Application") Set FilesInZip = objShell.NameSpace(DIR_SOURCE).items Set objFolder = objShell.NameSpace(DIR_DEST) ----------------------------------- の意味がわかりません。  オブジェクト メソッド プロパティ の意味はなんとなく程度です。 動物にたとえるならば、   犬・・・・オブジェクト   メソッド・・・・吠える、走る    プロパティ 犬の重さ 大きさ   という感じです。 Set objShell = CreateObject("Shell.Application") の意味なんですが、 ウィンドウズパソコンに入っているソフトを使うときによく出てくるんですが そうゆうもんだと 思っとけばいいんですかね?  たとえば  Set FilesInZip = objShell.NameSpace(DIR_SOURCE).items Set objFolder = objShell.NameSpace(DIR_DEST) この2行の意味ってなんでしょうか? google で NameSpace vbs で調べてはいるんですが、 さっぱりわからないです。 最終的には  解凍.vbs ってアイコンに 解凍したいzipファイルをドロップしたら、指定するフォルダへ 解凍ファイルを放り込むスクリプトを作ろうとしてます。 

  • Desktopのファイルを別フォルダにコピーしたい

    Desktop上のあるZIPファイル(例;zzz.zip)を別のフォルダ(例;DドライブのFolder1)にコピーして解凍する場合、下記のVBSで実行できると思いますが、これをDesktopの階層が異なる(後述の xxxxx)不特定多数のPCで実施する場合、実行できない場合があります。 このためDesktopの階層が左右されないScriptにしたいのですが、模範Scriptを教えていただけないでしょうか。DesktopPathなどで対応すればできるのでは、と思いますが、なかなかうまくいきません。 使用PCのOSはWindows7(32ビット)です。 '------------------------------------------------------------- DIR_Source = "C:\xxxxx\Desktop\zzz.zip" DIR_Destination = "D:\Folder1" Const FOF_Silent = &H04 Const FOF_NoConfirmation = &H10 Set objShell = CreateObject("Shell.Application") Set FilesInZip = objShell.NameSpace(DIR_Source).items Set objFolder = objShell.NameSpace(DIR_Destination) If (Not objFolder Is Nothing) Then objFolder.CopyHere FilesInZip, FOF_NoConfirmation + FOF_Silent End If

  • VBSでファイルやフォルダのコピー途中で止まる。

    VBSでファイルやフォルダのコピー途中で止まる。 以前に「コピー中にプログレスバーを表示させるには」http://okwave.jp/qa/q5990703.html ========================================== Const FOF_CREATEPROGRESSDLG = &H0& strTargetFolder = "C:\backup\" Set objShell = CreateObject("Shell.Application") Set objFolder = objShell.NameSpace(strTargetFolder) objFolder.CopyHere "D:*.*", FOF_CREATEPROGRESSDLG ========================================== で教えて頂きました上記スクリプトでコピーはできたのですが、普通では見えない保護されたシステムファイルも丸ごとコピーしようとする見たいで、途中で"System Volume Informationを作成または置き換えできません・・・"エラー表示がされて止まってしまいます。 このようなコピーできないファイルやフォルダを無視するか、指定して除外する方法はありませんでしょうか。 よろしくお願いいたします。

  • vbsでのエラー処理についてレクチャーを

    vbsのcopyhere関数でファイルのコピーを行うスクリプトを作成しました。コピー自体は問題なく出来るのですが、コピー元のファイルが存在しなかった場合は何も実行されないまま次の処理へ行ってしまうので、そういう場合にエラー用の処理をさせたいと考えてます。 Errメソッド使えばいいと思うのですがうまくいかなかったのでご教授ください。 試しに作成したvbs----------------------------------------- On Error Resume Next Set objShell = CreateObject("Shell.Application") Set objFolder = objShell.NameSpace(strTargetFolder) 'コピー先フォルダの設定 objFolder.CopyHere strCopyFile , &H10 ' set objShell = Nothing 'コピーが失敗した場合に実行させる。 if Err.Number <> 0 Then MsgBox "インストーラーをコピーできませんでした。","コピーに失敗しました" WScript.Quit end if ↓正常にコピー完了した後の処理 これでは上手くいきませんでした。 どうすればエラー時の処理を追加できるでしょうか?

  • VBS.ZIPでの解凍先を指定できない

    VBS.ZIPを使って圧縮ファイルを解凍した際に、解凍先を指定できずに困っています。 このVBS.ZIPは、どうやらZIPファイルに関連付けされているソフトがあると、そのソフトが起動してしまうようなんです。 関連付けされているソフト側で解凍先を指定していると、そのソフトの設定に従って動いてしまいます。 VBS側で解凍先を制御したいのですが、可能でしょうか? VBS.ZIP [http://www.vector.co.jp/soft/winnt/util/se355605.html]

  • BAT+VBSでのファイルZIP化処理が終わらない

    Win7・Win2008環境にて、Windowsバッチ(.bat)から、 引数に対象フォルダ・ZIPファイル作成場所を受け取って フォルダのZIP化を行うVBSスクリプトを作成しています。 下記のスクリプトをsample.vbsで作成しsample.batから実行すると ファイルがZIPファイル内に格納されておりません。(空のZIPファイル) そのため、「★★★」箇所の排他処理の関数を呼び出すようにすると ファイルがZIPファイル内に格納されるようになりましたが、 処理がいつまでも完了しません。 (コマンドプロンプトから直接コマンドライン実行すると正常終了します。) 何か間違ってますでしょうか?(そもそもフォルダのZIP化手順も含め) ご教授ほどよろしくお願い致します。 ■sample.vbs ※okwave用インデントのために全角スペース使用 ' ******************************************************* ' オブジェクト定義 ' ******************************************************* Dim fso Dim subf Dim FileName    ' ファイル名 Dim ArgDam     ' 遡り日数 Dim DifDam     ' 遡り日数との差 Dim FDate      ' ファイル作成日 Dim strTargetFolder ' ZIPファイル作成フォルダ Dim m_objShell Set m_objShell = CreateObject("Shell.Application") Set fso = CreateObject("Scripting.FileSystemObject") intOutRet = 0 ' 引数の取得********************************************* ' 引数/ZIP化対象フォルダ情報を取得 Set subf = fso.GetFolder(WScript.Arguments(0)) ' 引数/ZIPファイルの情報を取得 strTargetFolder = WScript.Arguments(1) ' ZIP化処理********************************************** If CreateZipfile(subf, strTargetFolder) = false Then   intOutRet = 1 End If ' オブジェクト開放 Set fso = Nothing WScript.Quit intOutRet ' ZIPファイルの作成************************************** Private Function CreateZipfile(subf, strTargetFolder)   Dim intFileCnt   Dim idx   On Error Resume Next   intFileCnt = 0   For Each FileName In subf.Files     intFileCnt = intFileCnt + 1   Next   'intFileCnt = intFileCnt - 1   idx = 0   Dim intNumbers() '動的配列を宣言   ReDim intNumbers(intFileCnt)   For Each FileName In subf.Files     intNumbers(idx) = FileName     idx = idx + 1   Next   '書庫ファイル作成   fso.CreateTextFile(strTargetFolder, False).Write "PK" & Chr(5) & Chr(6) & String(18, 0)   '書庫オブジェクト取得   Set l_objZIP = m_objShell.NameSpace(CStr(strTargetFolder))   '圧縮対象ファイルを取得   For Each l_strItem In intNumbers     '書庫に追加     l_objZIP.CopyHere l_strItem     '書庫が排他状態で開けるまで、処理継続・・・・・・・・★★★     Do Until IsNoOpen(l_strItem)     Loop   Next   ' 正常終了   CreateZipfile = True   exit function   On Error Goto 0   ' 異常終了   CreateZipfile = false End Function '排他チェック******************************************** Private Function IsNoOpen(p_strFileName)   'エラー無視   On Error Resume Next   WScript.Sleep 100   'ファイルを追加モードで開く/閉じる   Call fso.OpenTextFile(p_strFileName, 8, false).Close   IsNoOpen = CBool((Err.Number = 0)) End Function ■sample.bat F:\BAT\sample.vbs "F:\LOG" "F:\LOG\sample.zip" exit

  • VBSファイルを含むZIPフォルダを解凍できない

    知人から送られてきた、VBSファイルを含むフォルダが 解凍できなくて困っています。 解凍しようとすると [問題を起こす可能性のあるファイルをみつけました] と表示され、空のフォルダが作成されるのみです。 隣にあるXPだと問題なく解凍できます。 人に転送する必要もあるので、ぜVISTAでも解凍できないと 問題あり?って感じです。 ウィルス&ファイアーウォールソフトはNORTONを使っており、 NORTONのチェックを全てOFFにしてみましたが、それでも 症状は変わりませんでした。 どなたか、わかる方?もしくはこうやってみたら?でも OKなので回答頂ければうれしいです。

  • ファイルを解凍すると、名前の違うファイルができあがる。

    zipのファイルで「A」という名前のものをを解凍したら 「新しいフォルダ」という名前のものができました。 どうして名前が変わるんでしょうか? 自分でいくつかの適当なファイルを圧縮、解凍で試したけれど、こういう解凍前と解凍後の名前が変わることは確認できませんでした。 ウイルスかなにかでしょうか? どうして名前が変わるんでしょうか? 怖いです。おねがいします。

  • windows7 zipファイル 解凍コマンド

    windows7を使用しています。 定期的に自動でZIPファイルがあるフォルダに保存されます。 自動batでそれを解凍し中のファイルを加工したいと考えています。 その為、コマンドで解凍し、特定のフォルダに保存する方法を教えてください。 rundll32.exe zipfldr.dll ファイル名.zipでguiの解凍された(?)エクスプローラが開く事 はで来たのですが、意図した動作が出来ません。 zipファイルの中のファイルを任意のフォルダにコピーできれば良いのですが。。。

  • VBSでファイルの自動保存

    vbs初心者です。自分なりに調べたのですが、うまくいかず、アドバスを願い致します。目的は、ファイルを自動保存したいのです。 以下のように記載して、最後にカレントデレクトリイに「test.txt」と名前をつけて保存させたいのです。よろしくお願い致します。 Set objShell = WScript.CreateObject("WScript.Shell") WScript.Sleep 1000 objShell.Run "notepad.exe" objShell.SendKeys "hello "  objShell.SendKeys "%{F4}" objShell.SendKeys "%y"  

専門家に質問してみよう