首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在windows命令行中对文件名进行数字排序?

如何在windows命令行中对文件名进行数字排序?
EN

Stack Overflow用户
提问于 2016-02-14 22:42:16
回答 1查看 2.8K关注 0票数 0

windows资源管理器按正确的顺序显示。例如: filename1.txt、filename2.txt、filename11.txt等。当我尝试使用带有不同选项的DIR命令时,无法获得相同的行为。它显示filename1.txt、filename11.txt、filename2.txt。

有没有办法对它进行排序,以便保留数字顺序?

EN

Stack Overflow用户

发布于 2016-02-15 01:59:25

代码语言:javascript
运行
复制
@ECHO Off
:: dir list in numeric-value order
SETLOCAL
:: %1= directoryname; default current directory
SET "targetdir=%~1"
IF NOT DEFINED targetdir SET "targetdir=.\*.*"
:: remove variables starting $
FOR  /F "delims==" %%a In ('set $ 2^>Nul') DO SET "%%a="
SET /a maxnumlength=0
SET "manyzeroes=0000000000000000"
SET "manyzeroes=%manyzeroes%%manyzeroes%%manyzeroes%%manyzeroes%"
:: analyse list of filenames
FOR /f "delims=" %%a IN (
  'dir /b /a-d "%targetdir%" '
  ) DO CALL :detnlen "%%a"

:: build list of filenames
FOR /f "delims=" %%a IN (
  'dir /b /a-d "%targetdir%" '
  ) DO CALL :setname "%%a"

FOR  /F "tokens=1*delims=:" %%a In ('set $ 2^>Nul') DO ECHO %%b

GOTO :EOF

:detnlen
SET "name=%~1"
SET /a numlength=0
SET "action=L"
:detnloop
IF %action%==F SET "action=B"
SET "post=%name:~0,1%"&SET "name=%name:~1%"
IF "%post%" geq "0" IF "%post%" leq "9" (
 SET /a numlength+=1
 SET "action=F"
)
IF %action% neq B IF DEFINED name GOTO detnloop
IF %numlength% gtr %maxnumlength% SET /a maxnumlength=%numlength%
GOTO :EOF

:setname
SET "name=%~1"
SET "pre="
SET "nums="
SET "action=L"
:snloop
IF %action%==F SET "action=B"
SET "post=%name:~0,1%"&SET "name=%name:~1%"
IF "%post%" geq "0" IF "%post%" leq "9" (
 SET /a numlength+=1
 SET "action=F"
 SET "nums=%nums%%post%"
)
IF %action%==L SET "pre=%pre%%post%"&SET "post="
IF %action% neq B IF DEFINED name GOTO snloop ELSE SET "post="
IF %action%==F SET "post="
IF DEFINED nums SET "nums=%manyzeroes%%nums%"
IF DEFINED nums CALL SET "nums=%%nums:~-%maxnumlength%%%"
SET "$%pre%%nums%%post%%name%=:%~1"
GOTO :EOF

哦,我的天!

没有内置的开关可以以这种奇怪的方式显示目录,但这具有挑战的所有特征。

好的--它慢得离谱,但它看起来很有效。

其原则是确定首字母数字的最长序列为maxnumlength,然后将检测到的文件的名称分配给从$开始的环境变量,并使用由数字部分填充了前导零的文件名构造的名称。然后,set $按字母顺序列出$变量;选择值,即原始文件名。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35392995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档