18

特定のサブフォルダー構造内のファイルの再帰リストを取得し、それらをテーブルに保存して、foreachループを使用して各行を操作できるようにしようとしています。私は次のコードを持っています:

$table = get-childitem -recurse | where {! $_.PSIsContainer} | Format-Table Name, Length

foreach ($row in $table)
{
  $row[0]
  $row[1]
}

そのまま出力しようとすると$table、すべてのファイルに2列のデータがあり、完璧に見えます。(上記のように)foreachを試してみると、"Unable to index into an object of type Microsoft.PowerShell.Commands.Internal.Format.FormatEndData."エラーメッセージが表示されます。

私は何が間違っているのですか?

4

3 に答える 3

31

なぜフォーマットされたデータをステップスルーしようとしているのか、まったくわかりません。しかし、それは、$table文字列のコレクションにすぎません。したがって、次のことができます。

$table = get-childitem -recurse | where {! $_.PSIsContainer} | Format-Table Name, Length

foreach ($row in $table)
{
  $row
}

しかし、なぜあなたがしたいのか分かりません。ファイル内のデータを使って何かをしようとしている場合は、次のことを試すことができます。

$files = get-childitem -recurse | where {! $_.PSIsContainer}
foreach ($file in $files)
{
    $file.Name
    $file.length
}
于 2012-07-19T20:03:52.000 に答える
14

データの操作が完全に終了するまで、formatコマンドを使用しないでください。formatコマンドはすべてを文字列に変換するため、元のオブジェクトは失われます。

$table = get-childitem -recurse | where {! $_.PSIsContainer}
foreach($file in $table){
    $file.Name
    $file.FullName
}
于 2012-07-19T19:59:10.190 に答える
1

少し前にいくつかのプロファイルをクリーンアップしていて、プロセス中にこの投稿を見つけて、get-childitemの結果をどのようにループしたかを共有したいと思いました(lsはgciのエイリアスだと思いますか?)。これがどこかで誰かを助けることを願っています。

$blob = (ls).name 
foreach ($name in $blob) { 
get-childitem "D:\CtxProfiles\$name\Win2012R2v4\UPM_Profile\AppData\Local\Google\Chrome\User Data\Default\Default\Media Cache\f_*" -erroraction 'silentlycontinue'|remove-item -force -recurse -confirm:$false 
}
于 2018-09-11T17:21:56.943 に答える