2017-09-08 1 views
0

Ich habe versucht, die Textdatei mit Windows Batch-Sortierfunktion zu sortieren. Aber die Ergebnisse sind nicht wie erwartet. Die Eingabedatei ist so etwas wie folgt aus:Windows Batch-Sort-Funktion erzeugt keine Ausgabe wie erwartet

name2.txt

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

und die Ausgabe, die ich erhalten, wie unten:

sorted.txt

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

Das Code-Snippet ist :

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}" 

Die normale Windows-Batch-Sortierung funktioniert ebenfalls nicht. Also, helfen Sie mir freundlicherweise mit

Die erwartete Ausgabe Sortierung sollte

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

Auf DosTips.com sie einen Helfer Batch-Datei, die numerisch sortiert. http://www.dostips.com/DtCodeBatchFiles.php#_Toc145951142 – Squashman

Antwort

0

Sie nahe waren, aber wenn man Get-Content nutzen zu können, wird die Datei als String zu behandeln, keine Zahl.

+0

Vielen Dank ... es funktioniert .... aber ich habe kleine Änderungen an den oben genannten Code gemacht, wie es mir Fehler [Array] $ warf Ausgabe = @() Get-Content -LiteralPath "C: \ Offsite \ Name2.txt" | ForEach-Object {$ Ausgabe + = [Int] ($ _. Trim())} $ Ausgabe | Sortier-Objekt | Out-File C: \ offsite \ sorted.txt – SShetty

+0

Das Erzwingen der Interpretation der Eingabezeilen als Ganzzahlen ist zwar der entscheidende Zeiger, aber das Duplizieren der Eingabezeilen in einem Integer-Array, das in einer 'ForEach-Object'-Schleife aufgebaut ist, ist sowohl unnötig als auch ineffizient (sowohl hinsichtlich der Speichernutzung als auch der Leistung). Eine kleine Anmerkung: '.Trim()' ist nicht notwendig, um eine Zeichenkette zu einem '[int]' zu übertragen. – mklement0

0

Dieses umschlossene PowerShell-Skript wird alle Zahlen mit Nullen auf 10 Stellen belassen und nach diesem virtuellen Schlüssel sortieren.

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

Die einfachste Lösung ist Power:

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

Skriptblock { [int] $_ } wandelt jede Eingangsleitung ($_) in eine Ganzzahl zum Zwecke der Sortierung.

Beachten Sie, dass > eine "Unicode" (UTF-16LE) Datei erstellt; Verwenden Sie Out-File oder Set-Content mit -Encoding, um die Zeichencodierung zu ändern.

von cmd.exe Ausgeführt:

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