[Powershell]符合條件的檔案備份,並將內容清空
	需求說明
	要將某個目錄底下,所有目錄裡面的所有符合條件的檔案,備份、記錄並清空原本檔案內容。條件有二:第一,特定副檔名。第二,檔案內容包含特定字串。
	
	範例 
#created by 91, 檢查路徑是否存在,若不存在則建立folder
function CheckFolderExist($path)
{	
	if ((Test-Path $path) -ne $true)
    {			
		$o = mkdir $path		
    }
}
#檢查$path裡面所有副檔名為$extension的檔案,內容含有$pattern字串的檔案,按照其目錄結構備份到$backupPath,並將檔案清空
function DoStuff
{
	param ($path, $pattern, $extension, $backupPath)
		
	#透過-recurse 將$path底下所有目錄裡面,所有副檔名為$extension的檔案讀出來
	$File = Get-ChildItem $path -include *.$extension -recurse
		
	$StringVid = $pattern
	foreach ($Entry in $File) {
		#使用select-string -pattern,檢查檔案內容是否包含$pattern
		$List = select-string -pattern $StringVid $Entry
		if ($List.LongLength -gt 1) {		  		  
		  
		  #目標檔案的目錄結構
		  $backupDirPath =  $Entry.DirectoryName -replace [regex]::Escape($path) , ""
		  $backupDes = $backupPath + $backupDirPath + "\"
		  
		  CheckFolderExist $backupDes
		  
		  $Entry.FullName >> $backupPath\BouncerFileList.txt
		  cpi $Entry $backupDes		  		  		  
		  
		  #清空原本檔案內容
		  Set-Content $Entry.FullName ""
		  		  
		}
	}		
}
$path = "C:\MyHtmlFolder" #檢查目標路徑
$pattern = "不該出現的網頁內容" #網頁內容pattern
$extension = "html" #副檔名
$backupPath = "C:\backup" #備份路徑
DoStuff $path $pattern $extension $backupPath
	
	結論 
	一樣,只是memo一下一些相關的語法,加上大家可能在管理file server上,可能需要定時的清理一下log檔或針對特殊內容的檔案進行處理。所以記錄一下,寫法還很C#,不太Shell,請海涵。若有建議的寫法,也請不吝賜教。
blog 與課程更新內容,請前往新站位置:http://tdd.best/
