• ベストアンサー

特定のフォルダーに来たフォルダーを自動で圧縮する。

特定のフォルダーに来たフォルダーを自動で圧縮する。 例えばですがc:\1に他のフォルダーを追加したさいに自動で感知するか定時監視でそのフォルダーか別の決まったフォルダーに圧縮した物を移動出来る方法を探しています。 c:\1\hoge\(以下ファイル)→c:\1\hoge.zip or d:\zip\hoge.zip等別の場所に格納 ベストとしては圧縮ファイル+決まった文句付けられるとベストです。 hoge_ar.zip的な感じで。 手動でも出来るのですが出来れば自動化出来たらベストだなぁって事でお力添え下さいませ。 

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

  • ベストアンサー
  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.4

 あるいは、「+Lhaca」ではなくて、 ●ZIP.VBS(コマンドラインでZIPファイルを作成/追加/置換/削除/展開/表示するVBScript) http://www.vector.co.jp/soft/winnt/util/se355605.html?y から「ZIP.VBS」を ダウンロード すると、下記のような コード でいけます。  下記の コード は、#2 の「お礼」にお示しになった コード と、 ・'MakeZIP.VBSのパス ・For Each f1 In fc ~~ Next の 2ヶ所 が異なるだけです。 '----------------------------- Option Explicit 'MakeZIP.VBSのパス Const MakeZIP = "{MakeZIP.VBS の フルパス}\MakeZIP.VBS" Dim WshShell Set WshShell = WScript.CreateObject("WScript.Shell") Dim curdir curdir = WshShell.CurrentDirectory Dim fso, f, fc, f1 Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFolder(curdir) Set fc = f.SubFolders For Each f1 In fc WshShell.Run "CScript.exe """ & MakeZIP & """ d:\zip\" & f1.Name & "_ar.zip " & f1.Path Next '-----------------------------  更に、ダウンロード した「ZIP.VBS」を sakusa001 さんなりに アレンジ されれば、思い通りのことができそうですが。。。 #この件につきましては、フリーソフト とは申せ、作者さんの著作権がございますので、敢えて コード の投稿は控えさせていただきます。

その他の回答 (3)

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.3

 状況がよく把握できませんが、当初、お尋ねの内容のままだと、 Loop の後に fso.MoveFile f1.Name & ".zip", "d:\zip\" & f1.Name & "_ar.zip" とすればよさそうですが。。。

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.2

#どうも、私は敬遠されたようですが。。。 【概要】  +Lhaca で圧縮した フォルダ を移動する バッチ を Windows 標準の タスク スケジューラ に登録します。 ======================= 【方法】 [1]:+Lhaca を起動し、 http://okwave.jp/qa/q5841999.html の「ANo.2」の添付図のように設定します。  +Lhaca が インストール されていない場合は、ダウンロード & インストールしてください。 http://park8.wakwak.com/~app/Lhaca/ [2]:メモ帳 を開きます。 [3]:下記の コード を コピペ し、適当な フォルダ に拡張子「.bat」で保存します。ファイル 名は何でも結構です(例:「hoge.bat」)。 [4]:[3] の バッチファイル を タスク に登録します。  タスク を詳細に設定したいときは、下記をご参照ください。 ●タスク・スケジューラで数分おきにプログラムを繰り返し実行する http://www.atmarkit.co.jp/fwin2k/win2ktips/1332reptsk/reptsk.html [5]:[4] の タスク で設定した タイミング に、ご要望のことが実行されます。 ======================= 【コード】 ::▼ ここから ▼ @echo off cd /d "C:\Program Files\Lhaca\" for /d %%f in (c:\1\*) do Lhaca.exe %%f cd c:\1\ for %%f in (*.zip) do move %%f d:\zip\%%~nf_ar.zip ::リネイム だけの場合は、「for %%f in (*.zip) do ren %%f %%~nf_ar.zip」 for /d %%f in (*) do rd /s /q %%f ::▲ ここまで ▲ ======================= 【解説】  「(1) 決められた時間に」に関しましては、「自動感知」ということになれば、Windows サービス にでも組み込むのかと存じますが、それだけ パソコン の システム に負担がかかるかと存じますので、Windows 標準の タスク スケジューラ 機能で十分かと存じます。 -------------------------  (2) ~ (5) の コード について 2)カレントディレクトリを「C:\Program Files\Lhaca\」に移します。 cd /d "C:\Program Files\Lhaca\" ・「c:\1\」配下のすべての フォルダ を「Lhaca.exe」で圧縮します。 for /d %%f in (c:\1\*) do Lhaca.exe %%f ------------- 3)カレントディレクトリを「c:\1\」に移します。 cd c:\1\ ・「c:\1\」配下のすべての「*.zip」を「*_ar.zip」に リネイム します。 for %%f in (*.zip) do ren %%f %%~nf_ar.* でもよいかと存じますが、 for %%f in (*.zip) do ren %%f %%~nf_ar.zip にしました。 ------- 4)「*_ar.zip」にリネイムし、「d:\zip\」フォルダ に移動します。 for %%f in (*.zip) do move %%f d:\zip\%%~nf_ar.zip  (4) を有効にするときは、(3) の コード は不要です。 ------------- 5)「c:\1\」内のすべての フォルダ を確認なしに削除します。 for /d %%f in (*) do rd /s /q %%f  (5) の「削除」が不要の場合は、次回にこの バッチ を起動したときに、(3) または (4) の タイミング で 同名エラー を生じます。  このような場合は、「forfiles.exe」の コマンド を流用して作成日時を比較する http://www.atmarkit.co.jp/fwin2k/win2ktips/1137forfiles/forfiles.html ようなことになるのかも知れませんが、バッチ では コーディング が複雑そうですので、bat ではなくて vbs にした方がよいかも知れません(そのご要望があれば仰ってください)。

sakusa001
質問者

お礼

Option Explicit ' Lhaca.exe のパス Const lhaca = "C:\Program Files\Lhaca\Lhaca.exe" Dim WshShell Set WshShell = WScript.CreateObject("WScript.Shell") Dim curdir curdir = WshShell.CurrentDirectory Dim fso, f, fc, f1 Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFolder(curdir) Set fc = f.SubFolders For Each f1 in fc Dim e Set e = WshShell.Exec(lhaca & " """ & f1.Path & """") Do while e.Status = 0 WScript.Sleep 500 Loop Next まぁ自力じゃないですがリンク置くよりは直コード置くほうがベターかと思うので 圧縮場所等はlhacaの方で設定 スクリプトと同じフォルダー内のフォルダーを圧縮ただ これでは俺ルール的な問題で効率悪いと思うので後で 1.処理フォルダーの移動(確認とか重複圧縮避けるのに削除だと間違い誤動作関係では失敗が痛い) 2.処理フォルダーの固定化(限定用途なので固定しても問題無いので) あとはエラー処理・・・まぁ苦手ですが。 別にこれでも十分ですが(タスクでタイマーループかける事で自動処理も出来ますし) もうちょっとがんばってみますが。

sakusa001
質問者

補足

>>#どうも、私は敬遠されたようですが。。。 いえいえどうも最近メール転送が上手く行ってなかったので見落としです。 素早いレス出来なくてすいません。 用途として物凄く限定な物なのでやる時は困るけど量が無ければ面倒だなって物なので 具体的には最近アンドロイドタブレットを購入したのですが PCでのjpgでは解像度高すぎるみたいで定形jpg作成した後zip圧縮と言う工程が必要なのですが 解凍→定形jpg化→フォルダー+単ファイル化 実はここからが自分の問題でcuiでzip圧縮する方法が分からない。。。、 この点がこのbatから推測すればVBSでも作れるかも知れません (自分の技術力の問題も有りそうですが) ちょいがんばってみます。

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.1

1)決められた時間に 2)「c:\1\」フォルダ 内にある フォルダ を圧縮し 3)圧縮フォルダ名 を「~~._ar.zip」に変えて 4)「d:\zip\」フォルダ に移動し 5)「c:\1\」フォルダ 内にあった フォルダ は削除する。 でよろしいでしょうか?

関連するQ&A