本文出處:http://www.cnblogs.com/wy123/p/6129498.html 因工作需要,處理一批文件,本想寫C#來處理的,後來想想這個是PowerShell的天職,索性就網上各種搜,各種Demo,各種修改,花了半天時間,最後還是拼湊出來能達到效果了。本身對PowerShell並 ...
本文出處:http://www.cnblogs.com/wy123/p/6129498.html
因工作需要,處理一批文件,本想寫C#來處理的,後來想想這個是PowerShell的天職,
索性就網上各種搜,各種Demo,各種修改,花了半天時間,最後還是拼湊出來能達到效果了。
本身對PowerShell並不熟悉,可能有些彎路,實現的也比較爛,總之是把各種小功能拼湊在一起,最後還是拼湊出來能達到效果了。
如下是原始Demo,比較幼稚,權當是自己記錄的筆記了
1,文件信息統計
如下文件夾下麵有六個文本文件,統計這個文件夾下麵的文件名稱到一個日誌文件
將這個文件夾下的文件信息統計出來,存在一個指定路徑的文件中,文件是根據時間生成的。
如下截圖是生成的統計文件信息
如果想要統計文件的全路徑的話,直接用FullName即可,$fileName = $file.FullName即可取得文件的全路徑。
如果是想便利某一個路徑下文件夾下麵所有的文件和子文件夾的內容,可以再加上-Recurse參數,也即: $files = Get-Childitem "F:\TestPowerShell\" -Recurse
此時記錄的結果就是這樣子的了
如果是想統計某一類型的文件,需要加上-Include *.txt參數指定尾碼名,也即:$files = Get-Childitem "F:\TestPowerShell\" -Recurse -Include *.txt
2,文件操作(Copy)
如上建立的文件夾以及子文件夾複製到另外一個路徑中,這裡新建一個文件夾,用日期和時間命名
運行腳本之後,效果如圖,將指定文件夾下的文件和子文件夾下的文件copy到另外一個目錄中。
如果是想把某一個路徑(或者多個路徑)下的所有(包括子文件夾)下的文件Copy到一個文件夾下
可以便利逐個文件Copy至目標文件夾
foreach ($file in $fileList) { #判斷是否是文件,如果是文件,copy值目標文件夾 if($file -is [System.IO.FileInfo]) { #Copy文件 Copy-Item $file.PSPath $filepath\$destinationDir #記錄copy的日誌信息 $file.FullName | Out-File $filepath\$logfilename -Append } }
效果如圖(為了顯示出來效果,我將子文件夾中的文件重名了,防止因為重名文件覆蓋)
記錄的統計信息如下圖
最後附上一個上述操作的完成的腳本
CLS $filepath = "C:" $name = (get-date).ToString("yyyyMMddHHmmss") $logfilename = $name+'.txt' #創建日誌文件 New-Item -ItemType File -Path $filepath\$logfilename -Force #目標文件夾名稱 $destinationDir = $name #創建目標文件夾 if(!(Test-Path $filepath\$destinationDir) ) { New-Item $filepath\$destinationDir -type directory } #輸出F:\下所有文件的文件名 $fileList = Get-ChildItem F:\TestPowerShell -Recurse foreach ($file in $fileList) { #判斷是否是文件,如果是文件,copy值目標文件夾 if($file -is [System.IO.FileInfo]) { #Copy文件 Copy-Item $file.PSPath $filepath\$destinationDir #記錄copy的日誌信息 $file.FullName | Out-File $filepath\$logfilename -Append } }
3,文件內容操作
如下是文本文件中的內容,如果想讀取具體文件的內容,可以get-content $file.pspath這個命令,將文本文件的內容讀取出來
如下截圖是讀取出來的效果
如下是上述操作完整的處理腳本
cls $files = Get-Childitem "F:\TestPowerShell" -Recurse -Include *.txt foreach ($file in $files) #遍歷文件 { $linenumber = 0 #獲取當前文件的內容 $content = get-content $file.pspath #列印出來文件名稱 Write-Host "******************" Write-Host $file Write-Host "******************" #遍歷文件的每一行信息 foreach ($line in $content) { #列印出來文件的每一行信息 Write-Host $line #這裡當然可以繼續處理,比如對當前行信息繼續做其他處理 } }
到現在為止,文件可以統計了,可以移動了,可以讀取出來起具體內容了,
PowerShell的很多系統函數跟T-SQL或者C#差不多的,可以藉助系統函數對文件內容做更加豐富的處理
往下的工作就不說了,可以做各種處理來滿足需求了。
總結:
PowerShell的功能當然也不只是這些,上述也只是PowerShell的冰山一角,九牛一毛,只是藉助其最最基礎的功能來滿足自己的需求,
因為對PowerShell用的不多,可能還有非常多的系統命令來實現上述功能,上述操作應該有更加簡單更加方便的實現,這裡多寫幾行代碼,算是熟悉的一個過程。