2

作成日が古いものから新しいものの順にファイルを処理する必要がある

これは正しいですか、それとももっと良い方法がありますか?

ありがとう

Get-ChildItem -Path C:\Users\Tom\ -Filter "*.journal" | Sort-Object -Property CreationTime

ForEach ($sourcefile In $(Get-ChildItem $source | Where-Object { $_.Name -match "Daily_Reviews\[\d{1,12}-\d{1,12}\].journal" }))
{
    #### Process files in order from oldest to newest
    $file = $source+$sourcefile
 }
4

3 に答える 3

2

を使用sort-objectするのは正しい方法のように思えますforeachが、ソートされたリストを使用していません。|出力を にパイプするために別のものを追加sort-objectforeachます。

get-childitem -path c:\users\tom\ -filter "*.journal" |
sort-object -property creationtime |
where-object { $_.Name -match "Daily_Reviews\[\d{1,12}-\d{1,12}\].journal" } |
foreach-object {
    # $_ is the file we're currently looking at
    write-host $_.Name
}

最初のコマンドはget-childitem. ファイルのリストを順不同で出力します。

ファイルの順序付けられていないリストが にパイプされsort-objectます。ファイルの同じリストを出力しますが、作成時刻でソートされます。

ソートされたファイルのリストは にパイプされwhere-objectます。フィルタリングされたファイルのリストを出力しますが、まだソートされています。

フィルタリングおよびソートされたファイルのリストは にパイプされるforeach-objectため、 の本体はforeach各ファイルに対して 1 回実行$_され、現在処理中のファイルになります。このコードでは、ファイル名を書き出しましたが、もちろん、ファイルでやりたいことは何でも置き換えます。

于 2013-04-11T20:33:27.683 に答える
1

これが私の見解です。現在のオブジェクト ($_ など) は、foreach スクリプトブロック内で使用できます。

Get-ChildItem -Path C:\Users\Tom -Filter Daily_Reviews*.journal | 
Where-Object { $_.Name -match "Daily_Reviews\[\d{1,12}-\d{1,12}\].journal" } | 
Sort-Object -Property CreationTime | Foreach-Object{
   $_
}
于 2013-04-12T08:15:17.350 に答える