2014-08-31 41 views
0

嗨,夥計們我在搜索和生成文件的哈希值時遇到問題。我面臨的問題是在將其輸出 寫入Out.txt文件時。我想寫出Data1.txt和SqlData.txt兩個文件的輸出結果,但不幸的是它擦除了第一個文件輸出並保存了最後一個文件輸出結果,即SqlData.txt的值,下面是代碼的簡短說明,用於理解代碼搜索文件和生成MD5哈希值

#FILE1.TXT文件包含其中,我想搜索的兩個文件DATA1.TXT和SqlData.txt我要搜索 #Dir1.txt文件中包含的目錄(C :)路徑列表$ arr輸出文件

迄今爲止我所嘗試的代碼。

cls 
$arr = Get-ChildItem -Path "C:\Direct\File1.txt" 
$d = Get-Content $arr 
Foreach ($objFile in $d) { 
$c = $objFile.Name 
$a = Get-Content "C:\Direct\Dir1.txt" 
$e = Get-ChildItem -Path $a -Filter $objFile -Recurse -Force -ErrorVariable FailedItems -ErrorAction SilentlyContinue # Searching the Files 
$k = Get-Hash $e > C:\Direct\Reverse\Out.txt #Fetching the Hash value of files and writing output into Out.txt file 
} 

請讓我知道如果有什麼不明確,幫我解決這個問題。 感謝

+0

而不是使用'>'你可以使用管道。 'Get-Hash e $ | Out-file C:\ Direct \ Reverse \ Out.txt -Append' Append應該阻止它覆蓋已經存在的內容。 – Matt 2014-08-31 17:31:42

+0

@Matt是File1.txt包含文件名列表而不是完整的文件路徑 – Harsh 2014-08-31 17:41:14

+0

所以你正在搜索你的C:驅動器中的文件'Data1.txt'和'SqlData.txt'並輸出這兩個文件的散列到'out .txt'? – Matt 2014-08-31 17:47:43

回答

0
$searchPath = Get-Content "C:\Direct\Dir1.txt" 
Get-Content -Path "C:\Direct\File1.txt" | ForEach-Object{ 
    # For each line in the file. Create a custom object that contains all the needed data. 
    $theFile = Get-ChildItem -Path $_ -Filter $searchPath -Recurse -Force -ErrorVariable FailedItems -ErrorAction SilentlyContinue 
    [pscustomobject] @{ 
     'File Name' = $_ 
     'Path' = $theFile.DirectoryName 
     'Hash'= Get-Hash $theFile 
    } 
} | ConvertTo-Csv -notypeinformation | Out-File C:\Direct\Reverse\Out.txt -Append 
  1. $searchPath得到c:\你說的。如果多數民衆贊成它包含那麼你不真的需要它。但我可以在路上看到其他搜索,所以我按照要求離開它。這隻需要調用一次,所以我把它從ForEach循環中取出。
  2. 我們得到應該是單個文件列表的文件內容。
  3. 對於每個文件名,我們搜索$searchPath我想我們可以使Get-ChildItem調用更好。我需要調查一下。
  4. 用我們需要的所有細節創建一個自定義對象。
  5. 將自定義對象轉換爲csv實體,以便輸出變得乾淨。
  6. 將這些自定義對象放到文件中。我們使用-Append來確保它不會覆蓋任何細節。

注意事項 我剛掀起這達到潤潤嗓子。 我需要得到Get-Hash,因爲我沒有它,所以我無法正確測試這個。我不能很快更新到4.0。 這不會做任何錯誤檢查,即。如果存在文件。我會建議在任何生產腳本。

+0

我在運行上面的腳本時遇到了這個錯誤。 術語'For-EachObject'不被識別爲cmd,函數,腳本文件或可操作程序的名稱。 但是我提到的Script在添加Pipe之後按預期工作,而不是>,但是現在我面臨的另一個問題是在導出Result到Out時。txt文件我試圖將結果保存在分離的文件名中,我使用下面的代碼在起始處獲取 $ arr = Get-ChildItem -Path「C:\ Direct \ * .txt」 – Harsh 2014-09-01 16:45:02

+0

噢好的。第一個錯誤是由於錯字。它實際上是'ForEach-Object'.I我會盡可能地整合你的最後評論。 – Matt 2014-09-01 21:11:05

+0

現在它有道理'$ c = $ objFile.Name'是什麼。你能不能從你原來的例子中只用'C:\ Direct \ Reverse \ c $'? – Matt 2014-09-01 23:18:05