2016-11-27 38 views
0

我是Powershell的新手,我很難過。我試圖從一些特定的頂級文件夾開始生成所有子目錄中的文件列表,將結果輸出到文本文件或更好的CSV文件。例如,假設我有一個名爲「TEST」的文件夾,其中有一個名爲「A」的子文件夾。每個文件夾都有一些文本文件。期待輸出文件中的一行,但得到更多

我已經試過如下:

$path='c:\users\x\desktop\TEST' 
$files=get-childitem $path -recurse 
foreach($file in $files){ 
$file.fullname, $file.lastwritetime | out-file -append c:\users\x\desktop\output.txt 
} 

每個文件的輸出結果是兩行之間拆分,第一個是完整的文件名&路徑,第二個是日,月,年,和時間。 我只是無法弄清楚如何獲得這兩個屬性出現在同一行:

c:\users\x\test\file1.txt, last modified date 
c:\users\x\test\A\file2.txt, last modified date 
: 
etc. 

我將不勝感激解決這個問題的任何幫助。任何關於一本好的Powershell參考書的建議也會被讚賞,所以我可以正確地學習這個主題。

我在Windows 7 Pro上使用Powershell。

回答

0

關於此行

$file.fullname, $file.lastwritetime | out-file -append c:\users\x\desktop\output.txt 

當你在一個字符串中使用逗號不是你正在使用數組符號。它所做的是將管道下的兩個元素一次發送到Out-File cmdlet。如果您不輸入Out-File即可輸出$file.fullname, $file.lastwritetime,您也可以在控制檯中看到兩行單獨的行。您可以通過使其成爲一個字符串,解決這個問題....

"$($file.fullname), $($file.lastwritetime)" | out-file -append c:\users\x\desktop\output.txt 

不過,既然你正試圖使一個CSV反正我會建議你在Export-CSV看看無妨。只需使用select-object即可獲取所需的屬性。

$path="c:\users\x\desktop\TEST" 
$csv = "c:\users\x\desktop\output.txt" 
Get-ChildItem $path -Recurse | 
    Select-Object fullname,lastwritetime | 
    Export-Csv -NoTypeInformation $csv 
+0

謝謝,馬特。這當然有效,第二個建議使用「選擇對象」是我需要的最佳解決方案。 – BaconFish

+0

當我有一個文件結構中包含大約100萬個文件時,是否有更快的方式來生成此列表?目錄結構在網絡上,爲什麼上述技術可以工作,在這種情況下它的運行速度非常慢。儘管在我的本地驅動器上工作良好。這是否太多文件嘗試使用PowerShell? – BaconFish

相關問題