質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

Q&A

解決済

3回答

15612閲覧

Zipファイル名と解凍後のフォルダ名の不一致を解消したい。

Horokusa

総合スコア10

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

0グッド

0クリップ

投稿2017/02/03 01:30

編集2017/02/03 01:54

###前提・実現したいこと
Zipファイル名と解凍後のフォルダ名の不一致を解消するべく
Zipのファイル名を解凍後のフォルダ名に変更したいと考えています。

現在はPowerShellで一度解凍後、出力されたフォルダ名を取得し
再度Zipに圧縮したのちリネームという方法を取っていますが、
正直効率的とも言えず処理時間の問題からも改善したいと考えています。

サーバー側での自動実行を想定していますので、
コマンドラインから実行できない方法は利用できません。

個人的にはPowerShell等で対象のZipファイルの解凍後フォルダ名を
取得しリネームの処理だけで完結させたいのですが、
方法がわからず苦戦している状態です。

なにかアイディア等があれば教えて頂きたいと思います。

例)
実行前
Zipファイル名:[20160101.zip]
解凍後フォルダ名:[会議内容]

実行後
Zipファイル名:[会議内容.zip]
解凍後フォルダ名:[会議内容]

※解凍後フォルダ内のファイル、フォルダ等に関しては変更を行いません。

###補足情報(言語/FW/ツール等のバージョンなど)
端末:Windows
利用可能:PowerShell,bat,Vbscript等

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Y.H.

2017/02/03 01:44

質問に具体的な例を記載できないでしょうか? どういうファイル名のzipファイルで、zipファイル内にはどういう風にファイルやディレクトリが格納されていて、どのように展開させたいのかなど。
kanbeworks

2017/02/03 04:00

OSやPowerShellのバージョンはいくつになりますか?
guest

回答3

0

PorwerShellのサンプルです。

・.NET 4.5以上が必要なのでデフォルトではWindows8以上で動作します。
・Zipファイル内の最初に見つかった親フォルダ名のみ取得するので複数フォルダがZipに含まれる場合は正しく動作しません。

PowerShell

1$ArchivePath = "C:\path\to\archive\20160101.zip" 2 3Add-Type -AssemblyName 'System.IO.Compression.Filesystem' 4$ContentsSample = [System.IO.Compression.ZipFile]::OpenRead($ArchivePath).Entries[0].Fullname 5$ContentsParent = $ContentsSample.Split("/")[0] 6 7Write-Output $ContentsParent

実行結果

会議内容

投稿2017/02/03 04:25

fusechi

総合スコア128

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Horokusa

2017/02/03 04:34

ちょうど自己解決したところで解答に気づきました。 PowerShell版も試して見たいとおもいます。 ありがとうございます。
guest

0

ZIPファイルの展開は必須ですか?
単に書庫のファイル名を変更する際のフォルダ名を取得したいだけなら「ZipArchiveEntry.Open」などではだめでしょうか。

ZipArchiveEntry.Open メソッド()

投稿2017/02/03 02:18

編集2017/02/03 02:21
kanbeworks

総合スコア829

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Horokusa

2017/02/03 03:09

展開は必要有りません。 方法がわからなかったため、一度解凍→フォルダ名取得→再圧縮→リネームという手段を取っていました。 .NETはほとんど触ったことが無いのですぐには試せませんが調べて見たいと思います。
Y.H.

2017/02/03 03:30

kanbeworksさん .NET 4.5から追加されたものなので.NET Framework 4.5以上をインストールしてください。
Horokusa

2017/02/03 03:52

ファイルサーバーの整理に使うレベルのものだったので、BatやPowerShellでサクッと書いて使いたかったのですが…環境のインストール等は難しい環境なので上記の方法は断念しようかと考えています。
kanbeworks

2017/02/03 04:06

インストールが伴うものは厳しいようでしたら、展開しておけばそのまま使えるツールはいかかでしょう。 例えば7-zipのコマンドライン版とか。 https://sevenzip.osdn.jp/chm/cmdline/commands/list.htm PowerShellやバッチから呼び出してリストを取得し、その結果を使ってリネームするとか。
Horokusa

2017/02/03 04:39

リストアップして一番親のフォルダが解凍後の名前という事に気づきVBSで書いてみました。 ありがとうございます。
guest

0

自己解決

走り書きで重複チェックもクソも無いですが、
目的の動作はVBscriptで再現ができました。
ドラッグアンドドロップで対象のZipファイルをリネームします。

VBscript

1Dim ZIPfile 2For Each ZIPfile In WScript.Arguments 3 RenameZIP ZIPfile 4Next 5WScript.Quit 6Sub RenameZIP(ZIPfile) 7Dim fso 8Dim Shell 9Dim Folder 10Dim RenameFile 11Set fso=CreateObject("Scripting.FileSystemObject") 12Set Shell=CreateObject("Shell.Application") 13Set Folder=Shell.NameSpace(fso.GetAbsolutePathName(ZIPfile)) 14For Each FolderItem In Folder.Items() 15 set RenameFile=fso.getfile(ZIPfile) 16 If FolderItem.Name&"."&fso.GetExtensionName(ZIPfile) <> RenameFile.Name Then 17 RenameFile.Name=FolderItem.Name&"."&fso.GetExtensionName(ZIPfile) 18 End If 19Next 20End Sub

投稿2017/02/03 04:32

Horokusa

総合スコア10

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問