利用php實現檔案遷移重新命名

傑楓Jeff發表於2015-07-20

  首先表明,這是一個悲傷的故事。  

  暑假來臨,學校安排我們到某軟體外包公司實習,想想不用面試也是蠻方便的,可以藉此機會向大牛學習學習,雖然沒有工資(據說學校還交了600塊的保險),但想想還是蠻期待的,但真正到公司就懵逼了~技術人員都不在好不好!職位都安排好了,什麼人力資源,經營管理,還有財務管理之類,做培訓的,但沒有一個寫程式碼的啊!

  我被分到了經營管理部門,每天接觸的是各種合同審批,合同掃描,合同蓋章,合同...  總之圍著合同團團轉,打雜遠遠多於學習。想想如果沒有我們那些公司的人也要處理如此重複無聊的工作,真是讓我對工作有點抗拒了。

  不閒扯了,我遇到了這麼一個問題。公司合同文字在存檔前都要掃描到計算機上然後上傳到公司系統。 所有掃描完的合同都存在一個資料夾裡,當初掃描時為了方便統一命名為

"CD+年份+月份+合同編號.pdf";例如15年7月的第10份合同命名為“CD1507010.pdf”。每個月合同大概有300份左右。為了上傳到系統,有兩種方法,一種是一份一份上傳到系統,一種是在本地重新命名好打包傳送到系統。 手工操作的話,無論哪一種都耗時在一個小時以上。如此重複無聊的工作,簡直讓人奔潰。對於第一種方法,由於不瞭解系統,我沒有做更多深究,我著重考慮第二種方法。在本地重新命名規則是將原來的pdf檔案放置在"檔名+C"的資料夾下,並且重新命名為HTWB.pdf

  本著重複工作儘量交給計算機去做的原則,我考慮用自己所學的php語言來解決問題。(不知道其他語言是否更加高效,但這明顯要比純手工更高效)。

  公司電腦配置為win7系統,雖說是一家軟體公司,但是非研發部門的計算機水平和一般公司的無異。考慮到操作人員的計算機相關知識,也考慮到實現的便捷性,我沒有安裝Apache伺服器甚至也沒有啟動Windows自帶的IIS,直接利用命令列進行操作。

  名為htzy.php的指令碼如下:

<?php 

$path=dirname(__FILE__);
$handle=opendir($path);

while (!($item=readdir($handle))==false) {
    if ($item!='.'&&$item!='..'&&$item!='htzy.php') {

        $arr=explode('.', $item);
        $dirname=$arr[0].'C';
        mkdir($path.'/'.$dirname);
        rename($path.'/'.$item,$path.'/'.$dirname.'/HTWB.pdf' );
    }
}

unlink('./htzy.php');
 ?>

  將此檔案放置在要處理的資料夾下,在資料夾開啟命令列視窗,輸入  

      php -f htzy.php

   稍等幾秒就好。  

       簡單利用  mkdir()  rename()函式完成檔案轉移,最後利用unlink刪除指令碼,所以,要重複利用此指令碼的話需要儲存好它~

 

   至此,檔案遷移重新命名完成。

    

  後記:今天利用本方法在公司電腦上進行檔案遷移時發生了灰常尷尬的一幕:不僅沒有完成預定任務,還頻頻報錯,等我再細細察看,發現真正發生遷移的是操作資料夾的上的好幾層目錄。 結果是可想而知的,如此一來將上幾層 的某個目錄下的檔案資料夾進行了遷移重新命名!!!萬幸的是沒有破壞太多的有價值的文件,也可以手工回覆。

  作為一個程式設計師必然不能容忍程式的此種背叛。 經過我細細察看,發現dirname(__FILE__)生成的竟然是實際操作了的那個資料夾。通過多次測試,發現在windows下漢字字元直接亂碼,後面的部分被忽略掉了。比如C:\Users\Administrator\Desktop\桌面 這個路徑通過dirname(__FILE__)生成的竟然是C:\Users\Administrator\Desktop,為了避免這種情況,將原來程式碼$path=dirname(__FILE__);調整為$path=dirname('./htzy.php');

  今後寫程式碼還是多留心,多測試,最重要的還是不能太自信。

 

相關文章