[[20150310184832]] 『zipファイルになっているフォルダの中にあるtxtの』(あや) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『zipファイルになっているフォルダの中にあるtxtのみコピーしたい』(あや)

zipファイルになっているフォルダの中にあるtxtのみコピーしたい

教えてください

AZ0000000000.zip の中に
 −フォルダ [aaa]

 −フォルダ [bbb]−ファイル[234.pdf]

 −フォルダ [ccc]−フォルダ[999]−ファイル[123.exe]
                  −ファイル[114.pdf]
                  −ファイル[135.txt]

zipフォルダの中に
複数のフォルダがあり、階層を降りて行くと
拡張子がtxtのものがあります

この.txtのもののみ、別のフォルダにコピーをしたいのです

ちなみに、
.txtはzipファイルの中に必ず一つです
zipフォルダ名、ファイル名はバラバラです
バラバラですが、フォルダ名は同じなので.txtがある場所は固定です

そして、zipファイルは100個以上あります
(重くなるようでしたら、10個ずつとかでも問題ない)

なけなしの知識で、調べたのですが
Filecopyとワイルドカードを使うとできるようで試してみたのですが
zipはできないのかな?

一回解凍してから、なのかな?

教えてください

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 VBA のFileCopy は ZIP に限らず圧縮ファイルには対応していません。

 マクロに限らず、ZIP をコマンドベースから実行するのは意外と難しそうですが、
 フリーウェアなどを使うのは不可でしょうか。

 例えば、こんなのを使えば、
http://sevenzip.sourceforge.jp/
 コマンウィンドウでこの程度で取り出せるのですが。

 C:\>CD /D  "D:\コピーしたいフォルダパス"
 D:\コピーしたいフォルダパス>C:\Program Files\7-Zip\7z.exe x D:\Data\*.zip *.txt

(Mook) 2015/03/10(火) 20:25


 Mookさん ありがとうございます

 フリーウェアはちょうど使っておりましたので
 教えていただいた方法で進めたいと思っており

 C:\>CD /D  "D:\コピーしたいフォルダパス"
 D:\コピーしたいフォルダパス>C:\Program Files\7-Zip\7z.exe x D:\Data\*.zip *.txt

 をコマンドプロンプトに入力しようとしているのですが
 ツール-プログラム-アクセサリ-コマンドプロンプトで、間違っていませんか
 (コマンドプロンプトの使い方があまり詳しくないため教えてください)

 c:\>cd /d "c:\users\●●●\downloads"としてEnterを押すと
 その階層に移動するのですが

 c:\users\●●●\dounloads>となった続きに
  D:\コピーしたいフォルダパス>C:\Program Files\7-Zip\7z.exe x D:\Data\*.zip *.txt
 を入力するのでしょうか?

 なんか違うような感じはするのですが、どうすればよいかがわからずにいます
 教えてください
(あや) 2015/03/11(水) 09:37

 まず
 (1)プログラムのパス
 (2)ZIP ファイルのあるデータパス
 (3)解凍ファイルを保存したいパス
 を明確にしてください。

 先に提示した例では、それぞれ
 (1)C:\Program Files\7-Zip\7z.exe
 (2)D:\Data
 (3)D:\コピーしたいフォルダパス
 としてのサンプルです。

 実際に自分の環境に合わせて変更してください。
 コマンドの使用方法は、
 >C:\Program Files\7-Zip\7z.exe -?
 とすれば、表示されるのオプション等は適宜追加してください。

 ・・・>
 までの部分はコマンドプロンプトなので、入力文字ではありません。
 「>」 より後ろ(>は含まない)の部分を入力してください。

(Mook) 2015/03/11(水) 10:15


Mook様のやり方が正しいのですが、FileCopyではできませんが、CreateObject("Shell.Application")を使えば不可能ではありません。
以下を参考に作成します。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12136913357

Option Explicit

Sub file()
Dim sh As Object, fol1 As Object, fol2 As Object

Set sh = CreateObject("Shell.Application")
Set fol1 = sh.Namespace("zipファイル場所") 'zipファイル場所
Set fol2 = sh.Namespace("解凍ファイル場所") '解凍ファイル場所
extract sh, fol1, fol2
End Sub

Private Sub extract(sh As Object, zipfol As Object, dstfol As Object)
Dim f As Variant
For Each f In zipfol.Items
If (f.IsFolder = True) Then
extract sh, f.GetFolder, dstfol

ElseIf Right(f, 3) = "txt" Then 'txtファイルだけ解凍

dstfol.CopyHere f

End If
Next
End Sub

ただの参考としてください

(デイト) 2015/03/11(水) 10:39


 そうですね。
 簡単ではないですが、VBA(VBS)でもできますね。
 (MS は CopyHere は保証しないといってはいますが、できているようです。)
http://support.microsoft.com/kb/2679832/ja   「CopyHere メソッドから Zip ファイルを処理することはできません」
 なので、VBA でやりたい場合はデイトさんのを参照してください。
 検索すれば、いろいろとサンプルコードは見つかると思います。

 PowerShell の V5 では ZIP 用のコマンドレットがサポートされたようなので、
 これが使えれそちらを紹介したかったのですが、 Windows7 の標準は V2.x 〜 V4.x
 なので、コマンド案を提案しました。

 以下補足です。

 >ツール-プログラム-アクセサリ-コマンドプロンプトで、間違っていませんか
 で正しいです。

 7z をインストールした状態でしょうか(C:\Program Files\7-Zip\7z.exe ファイルがありますか?)

 もしあるのであれば、下記のようにしてみてください。

 1) C ドライブの直下に Work というフォルダを作成します。
 2) 処理したいZIP ファイルを Work の下にコピーします。
 3) コマンドプロンプトを開き、下記を順番に入力します。「>」 より後ろのみ

 C:\Users\Aya>CD /D "C:\Program Files\7-Zip"
 C:\Program Files\7-Zip>SET PATH=%PATH%;%CD%
 C:\Program Files\7-Zip>CD /D C:\Work
 C:\Work>7z.exe x -r *.zip *.txt

 これで Work の下に、txt 拡張子を持ったファイルが解凍されるかと思います。
 (フォルダ aaa,bbb,ccc 等も再現されます。)
(Mook) 2015/03/11(水) 10:59

 Mookさん
 わたしがコマンドプロンプトの使い方が慣れていないのもあり
 デイトさんの記述をお借りし、
 必要な結果が得られるようになりました
 いつも幅広い知識教えてくださり頭が下がります

 お二人ともありがとうございました
(あや) 2015/03/11(水) 15:20

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.