質問: $(throw "missing: base path") ) return [system.io.path]::getfullpath($path).substring([system.io.path]::getfullpath($basepath).length + 1) } # calculates crc checksums for all files in the specified directory and writes # the checksums to a file # # usage: crcsumall <path to folder to check> <file conatining checksums> # # note: specifying arguments is mandatory. function global:crcsumall { param($inputpath,$outputfile) $allfiles=get-childitem $inputpath -rec | where-object {!($_.psiscontainer)} | sort-object name new-item -force -type file $outputfile cd $inputpath foreach ($file in $allfiles) { $relfile=relativepath $file.fullname $inputpath $relfile=$relfile -replace("\\","/") $relfile="./$relfile" cksum.exe $relfile | out-file -encoding oem -append $outputfile } } 編集#2:解決策何が問題なのか気づきました。並べ替え後に相対パスを追加しました。したがって、正しいコードは次のとおりです。function global:crcsumall { param($inputpath,$outputfile) $allfiles=get-childitem $inputpath -rec | where-object {!($_.psiscontainer)} #| sort-object name new-item -force -type file $outputfile cd $inputpath foreach ($file in $allfiles) { $relfile=relativepath $file.fullname $inputpath $relfile=$relfile -replace("\\","/") $relfile="./$relfile" $relfile | out-file -encoding oem -append $outputfile } $sorted=get-content $outputfile | sort-object new-item -force -type file $outputfile $sorted | out-file -encoding oem -append $outputfile $forcksum=get-content $outputfile new-item -force -type file $outputfile $forcksum | foreach-object { cksum.exe $_ | out-file -encoding oem -append $outputfile} } ファイルを3回書き込むのは本当に醜いので、コードを少しクリーンアップするだけで済みます。 :)
回答: 次のようなものを試してください。import-csv c:\path\to\file.txt -header ('foo', 'bar', 'wombat') -delimiter ' ' | sort-object wombat 入力に明確に定義された列がある限り、基準を満たしているため、元の回答を残しておきます。コメントに基づいて、解決策は作成時に配列をソートすることです。$allfiles=get-childitem $inputpath -rec | where-object {!($_.psiscontainer)} | sort-object name cd $inputpath foreach ($file in $allfiles) {cksum.exe $file | out-file -append $pathtooutputfile}