iT邦幫忙

0

[20點]對壓縮檔案ZIP內的文字檔,進行批次修改

  • 分享至 

  • xImage

請問各位高手

小弟希望對壓縮檔案ZIP內的文字檔,進行批次修改
因為檔案有數百個,不想解壓縮後,批次修改,再重新壓縮為ZIP

情境如下:
1.檔案有約300個ZIP壓縮檔,壓縮檔案都是記事本格式TXT檔,裡面都是單純TXT,無目錄。如: a.zip內含 x.txt 、 y.txt 、 z.txt

2.希望能夠將txt 內的某個字串,替換掉

如果沒有zip ,很多軟體可以做(如: ActualSearch & Replace 、UltraEdit),但因為txt都被zip包起來。變得很難處理

外獅佬 iT邦大師 1 級 ‧ 2015-06-05 09:11:52 檢舉
解開...批次修改...壓縮
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

2
weiclin
iT邦高手 4 級 ‧ 2015-06-05 10:22:40
最佳解答

找不到工具就自己寫, 反正沒幾行
自己把開頭的 $search 與 $replace 改成你要搜尋與取代的文字

<pre class="c" name="code">
<?php

$search = "xxxxx";
$replace = "oooooo";
        
function usage_exit() {
    echo "Usage {$argv[0]} <zip file>\n";
    exit(1);
}

if ($argc != 2 || !file_exists($argv[1])) {
    usage_exit();
}

$zip = new ZipArchive();
$ret = $zip->open($argv[1]);
if (true !== $ret) {
    echo "failed to open zip file\n";
    exit(1);
}

$fileNum = $zip->numFiles;
for($i = 0; $i < $fileNum; ++$i){
    $stat = $zip->statIndex($i);
    $name = $stat['name'];
    echo "$i processing {$name}\n";
    if (!preg_match('/\.txt$/', $name)) {
        continue;
    }
    
    $content = $zip->getFromName($name);
    $new_data = str_replace($search, $replace, $content);
    $zip->deleteName($name);
    $zip->addFromString($name, $new_data);
}

$zip->close();

用法:

  1. 首先你要能執行 php, 在 windows 底下就下載 http://windows.php.net/download/
  2. 解壓縮 php 的檔案, 整個資料夾存到 c:\php
  3. 把上面的程式存成 zipreplace.php 放到 c:\php資料夾裡, 也把你要修改的 zip 也丟過去
  4. 打開一個命令列, cd 到 c:\php
  5. 輸入 php.exe zipreplace.php 你的.zip

一次一個, 記得 zip 檔要備份, 我不保證這程式不會弄壞啥

我要發表回答

立即登入回答