我一直在尝试使用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
答案 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-File
或Set-Content
与-Encoding
一起更改字符编码。
从cmd.exe
:
powershell -c "Get-Content 'C:\offsite\name2.txt' | Sort-Object { [int] $_ } >sorted.txt"