2017-09-08 6 views
0

Windowsのバッチソート機能を使用してテキストファイルをソートしようとしています。しかし、結果は期待通りではありません。Windowsバッチソート機能が期待どおりに出力しない

name2.txt

77 
76 
75 
74 
73 
72 
78 
69 
68 
67 
66 
65 
64 
63 
71 
62 
9 
8 
7 

と私が手出力は以下の通りです::

9 
8 
78 
77 
76 
75 
74 
73 
72 
71 
70 
7 
69 
68 
67 
66 
65 
64 
63 

sorted.txtコードスニペットは、入力ファイルは次のようなものです:

setlocal EnableDelayedExpansion 
set "names=" 
for /L %%i in (1,1,9) do set "names=!names! C:\offsite_tlog\%%i*.tlg" 
dir /B /A-D /O-D %names% > name1.txt 
for /F "tokens=1 delims==." %%a in (name1.txt) do echo %%a >> name2.txt 
powershell.exe -command " & {Get-Content "C:\offsite\name2.txt" | Sort-Object -Descending > sorted.txt}" 

通常のWindowsバッチソートも機能しません。だから、親切にあなたが接近していた

7 
8 
9 
61 
62 
63 
64 
65 
66 
67 
68 
69 
70 
71 
72 
73 
74 
75 
76 
77 
78 
+0

DosTips.com彼らは、数値的にソートヘルパーバッチファイルを持っています。 http://www.dostips.com/DtCodeBatchFiles.php#_Toc145951142 – Squashman

答えて

0

期待される出力があるべき

を並べ替えで私を支援していますが、Get-Contentを使用する場合、それは文字列ではなく、数としてファイルを処理しています。

+0

ありがとうございます...それは動作しています....しかし、私はエラーを投げていたので、上記のコードに小さな変更を加えました [配列] $出力= @() Get-Content -LiteralPath "C:\ offsite \ name2.txt" ForEach-Object {$ Output + = [Int]($ _。Trim())} $出力| Sort-Object | Out-File C:\ offsite \ sorted.txt – SShetty

+0

入力行の解釈を強制的に整数として強制することは本当に重要なポインタですが、ForEach-Object'ループで構築された整数配列の入力行を複製することは不要です。 (メモリ使用とパフォーマンスの面で)非効率的です。マイナーノート: '.Trim()'は文字列を '[int]'にキャストする必要はありません。 – mklement0

0

このラップされたPowerShellスクリプトは、0から10までのすべての数字を左揃えし、その仮想キーに並べ替えます。

powershell -NoP -C "gc 'C:\offsite\name2.txt'|Sort -desc {[Regex]::Replace($_,'\d+',{$args[0].Value.PadLeft(10,'0')})}|sc sorted.txt" 
0

最も単純なPowerShellの溶液である:

Get-Content 'C:\offsite\name2.txt' | Sort-Object { [int] $_ } > sorted.txt 

スクリプトブロック{ [int] $_ }は、ソートのために整数への各入力ライン($_)に変換します。

>は「Unicode」(UTF-16LE)ファイルを作成します。文字エンコーディングを変更するには、Out-FileまたはSet-Content-Encodingを使用してください。 cmd.exeから呼び出され

powershell -c "Get-Content 'C:\offsite\name2.txt' | Sort-Object { [int] $_ } >sorted.txt" 
関連する問題