→ y3k:我覺得7zip缺少的比較重要功能是批次不記錄路徑壓縮 01/09 11:32
→ y3k:WinRAR還在我電腦裡的原因也只是這個01/09 11:33
→ y3k:WinRAR的時候可以圈選多個資料夾或檔案 選單加入壓縮檔後01/09 12:18
→ y3k:在<檔案>分頁勾選"一個檔案建立一個壓縮檔"並在上方檔案路徑01/09 12:26
→ y3k:下拉選擇"不要儲存路徑"01/09 12:20
→ y3k:這個功能在整理圖片掃本等等的東西時是很方便的01/09 12:22
→ y3k:在<檔案>分頁勾選"一個檔案建立一個壓縮檔"並在上方檔案路徑01/09 12:26
說真的壓資料不要資料夾的做法蠻神奇的
我試著去處理不過一直不順利
直到發現7z.exe可以匯入filelist壓縮
不過一直失敗
直到我發現filelist文字檔的編碼必須是utf-8
如果編碼是ANSI的話會格式錯誤
一開始我想找可以將文字檔從ANSI轉碼成utf-8的工具
不過中途發現命令提示字元可以輸出Unicode-LE
還有ConvertZ的Console版ConCmd可以將Unicode-LE轉成utf-8
處理的流程是這樣
先用命令提示字元下製作filelist
再從Unicode-LE轉碼成utf-8後
用7z.exe讀取filelist壓縮
方法如下
1.安裝7-Zip 4.65或以上版本
2.下載ConCmd Ver 1.5並解壓縮到C:\concmd15
http://www.megaupload.com/?d=L239PRVU
3.建立右鍵選單
---------請複製除了本行以外的以下文字---------
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Directory\shell\7za\command]
@="C:\\7za.bat \"%1\""
---------請複製除了本行以外的以上文字---------
在桌面上存成7za.reg後左鍵點選兩下後即在右鍵上新增7za這個壓縮項目
2.建立處理批次檔案
---------請複製除了本行以外的以下文字---------
set list=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%
cmd /u /c dir /s/b/A:-D "%~dpn1">%temp%\%list%.txt
"C:\concmd15\ConCmd.exe" /i:ULE /o:utf8 %temp%\%list%.txt
"C:\Program Files\7-Zip\7z.exe" a -t7z "R:\00.7z" @%temp%\%list%.txt
pause
del %temp%\%list%.txt
---------請複製除了本行以外的以上文字---------
開啟記事本後貼上然後另存為7za.bat於C:\
預設壓縮檔路徑我設在R:\00.7z
請依自己的需求更改路徑與壓縮檔檔名
資料夾按右鍵後點7za後就會製作檔案清單後壓縮
唯一的問題就是如果有同檔名檔案將會壓縮失敗
目前我只做出單一資料夾下的檔案壓縮
點選多個資料夾後再壓縮的scrpit目前還沒做出來
請大家多多回應討論
參考資料:
retrieve current directory name in batch
http://www.msfn.org/board/topic/
56320-retrieve-current-directory-name-in-batch/
DIR
Display a list of files and subfolders
http://ss64.com/nt/dir.html
Windows : 在 cmd 下的 dir 輸出 UTF-8 編碼的清單
http://gsyan888.blogspot.com/2011/04/windows-cmd-dir-utf-8.html
漫談Windows XP環境變數
http://texhello.pixnet.net/blog/post/
21374901-%E6%BC%AB%E8%AB%87windows-xp%E7%92%B0%E5%A2%83%E8%AE%8A%E6%95%B8
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.41.132.105
※ 編輯: ryousuke 來自: 114.41.132.105 (01/18 22:14)
推 s25g5d4:使用DATE當變數是不切實際的 因為會隨控制台中的地區語言 01/18 22:39
→ s25g5d4:設定而有不同... 01/18 22:39
用date變數只是一時之間用來當filelist的檔名
壓縮完就會清掉了
→ s25g5d4:另外 UTF-8不用這樣弄 可以用chcp 65001 01/18 22:39
可以詳細說明方法嗎
謝謝
※ 編輯: ryousuke 來自: 114.41.132.105 (01/18 22:43)
推 s25g5d4:bat開頭使用chcp 65001 所有輸出資料都將會是UTF-8編碼 01/18 22:46
我試試看把chcp 65001加進去看看
→ s25g5d4:如果你有去看過你產生的list txt 會發現它的檔名是 01/18 22:47
→ s25g5d4:週三 21201.txt 雖然不會發生問題 不過感覺很怪就是了 01/18 22:47
→ s25g5d4:反正那不重要 弄完就刪掉基本上是沒差.... 01/18 22:48
沒有喔
輸出的是YYYYMMDD.txt
你可以拿那一段script跑跑看
※ 編輯: ryousuke 來自: 114.41.132.105 (01/18 22:52)
推 s25g5d4:唔 在我的電腦跑出來是這樣... 01/18 22:56
我是在xp跑的
你的作業系統是win7嗎
※ 編輯: ryousuke 來自: 114.41.132.105 (01/18 22:57)
推 s25g5d4:Yes 01/18 23:01
那我再找個固定一點的變數好了
※ 編輯: ryousuke 來自: 114.41.132.105 (01/18 23:15)
推 s25g5d4:Okay, 我發現問題了 問題在我剛剛提過的chcp...囧 01/18 23:10
推 s25g5d4:控制台的地區及語言選項也有差... 01/18 23:14
我把chcp加進去會卡住
不知道是什麼問題
※ 編輯: ryousuke 來自: 114.41.132.105 (01/18 23:16)
推 s25g5d4:把bat檔丟給我吧 01/18 23:18
---------請複製除了本行以外的以下文字---------
chcp 65001
set list=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%
cmd /c dir /s/b/A:-D "%~dpn1">%temp%\%list%.txt
"C:\Program Files\7-Zip\7z.exe" a -t7z "R:\00.7z" @%temp%\%list%.txt
pause
del %temp%\%list%.txt
---------請複製除了本行以外的以上文字---------
※ 編輯: ryousuke 來自: 114.41.132.105 (01/18 23:21)
推 s25g5d4:恩 沒錯 就是%DATE%的問題 01/18 23:21
→ s25g5d4:改成set list=%RANDOM% 01/18 23:21
改了list也出不來
應該在chcp 65001執行完script就結束了
※ 編輯: ryousuke 來自: 114.41.132.105 (01/18 23:24)
推 s25g5d4:難道說XP不能改codepage....囧 01/18 23:25
可以改
不過執行完chcp 65001後script就中斷了
※ 編輯: ryousuke 來自: 114.41.132.105 (01/18 23:26)
請問s25g5d4桑批次檔有沒有換行符號
我找到解法了
不過太長需要換行
※ 編輯: ryousuke 來自: 114.41.132.105 (01/18 23:36)
推 s25g5d4:\n 01/18 23:37
→ s25g5d4:剛剛開了VM來看 XP cmd對UTF-8的支援性不佳 01/18 23:38
只有字型支援不佳
字碼應該都可以正常處理
※ 編輯: ryousuke 來自: 114.41.132.105 (01/18 23:41)
"C:\Program Files\7-Zip\7z.exe" a -t7z "R:\00.7z" @%temp%\%list%.txt
s25g5d4桑可以幫我寫一下上面的命令換行的方法嗎
我換行一直失敗
※ 編輯: ryousuke 來自: 114.41.132.105 (01/19 00:17)
→ s25g5d4:單一指令的話不能換行.... 01/19 00:22
推 s25g5d4:我想改用js or vbs了...bat真OOO麻煩 01/19 00:24
我放棄了
修改後的scrpit在下面
請大家把三行整理成一行吧
s25g5d4桑你看要不要出js或vbs版的scrpit
※ 編輯: ryousuke 來自: 114.41.132.105 (01/19 00:36)