Windows批量排序功能无法按预期生成输出

时间:2017-09-08 20:45:50

标签: windows powershell sorting batch-file

我一直在尝试使用Windows批量排序功能对文本文件进行排序。但结果并不如预期。输入文件是这样的:

name2.txt

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

,我得到的输出如下:

sorted.txt

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

代码段是:

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

3 个答案:

答案 0 :(得分:0)

你很接近,但是当你使用Get-Content时,它将文件视为字符串,而不是数字。

[Array]$Output = @()
Get-Content -LiteralPath "C:\offsite\name2.txt" |
  ForEach-Object { $Output += [Int]($_.Trim()) }

$Output | Sort-Object | Out-File -Path .\sorted.txt

答案 1 :(得分:0)

这个包装好的PowerShell脚本会将所有数字的所有数字都为零,并将其排在10个位置并对该虚拟键进行排序。

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

答案 2 :(得分:0)

最简单的PowerShell解决方案是:

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

脚本块{ [int] $_ }将每个输入行($_)转换为整数以进行排序。

请注意>创建“Unicode”(UTF-16LE)文件;使用Out-FileSet-Content-Encoding一起更改字符编码。

cmd.exe

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