如何使用批处理脚本按长度对行进行排序?

use*_*184 0 sorting batch-file line

我想制作脚本,该脚本在文件example.txt中按长度对所有行进行排序(某些行包含空格)。最长的一行将是第一行,最短的一行将在文档的末尾。脚本可以重写原始文档。谢谢 :-)

dbe*_*ham 5

通过将每一行作为其自己的文件写入一个临时文件夹中,可以轻松而快速地完成此任务。然后使用DIR / B / OS按大小对文件(行)进行排序,使用FOR / F捕获结果,然后使用TYPE打印每个文件(行)。

@echo off
setlocal disableDelayedExpansion

set "file=example.txt"
set "tempLoc=sortLinesTemp"

md "%tempLoc%"
set "cnt=0"
for /f usebackq^ delims^=^ eol^= %%A in ("%file%") do (
  set /a cnt+=1
  set "ln=%%A"
  setlocal enableDelayedExpansion
  echo(!ln!>"%tempLoc%\f!cnt!"
  endlocal
)
(for /f %%F in ('dir /b /o-s "%tempLoc%"') do type "%tempLoc%\%%F")>"%file%.new"
move /y "%file%.new" "%file%" >nul
rd /s /q "%tempLoc%"
type "%file%"
Run Code Online (Sandbox Code Playgroud)

此解决方案将删除空行。空行可以保留更多代码。

此外,行长限制为少于8191个字符。此限制对于任何纯本地批处理解决方案都是固有的。