我们可以在Windows资源管理器中按名称排序的目录文件中看到。

如果我在Windows命令提示符下尝试相同的操作,则按名称命名不同 - 正确

dir *.jpg /ON /B

cubierta.jpg
pag00.jpg
pag06.jpg
pag08.jpg
pag09.jpg
pag100.jpg
pag101.jpg
pag102.jpg
pag103.jpg
pag104.jpg
pag105.jpg
pag106.jpg
pag107.jpg
pag108.jpg
pag109.jpg
pag11.jpg, etc, etc, etc, ...

有没有办法让 dir 按名称排序,在那里读取数字就像人类一样?

有帮助吗?

解决方案

您最好的选择(如果可能)是在您的较小数字中添加足够的前导零(在本例中为两个),以便按预期排序。

其他提示

Windows资源管理器使用特殊的排序功能, StrCmpLogicalW cmd.exe 不使用,因此输出的差异。不过,你可以用它编写自己的排序程序。

您可能也对Michael Kaplan对的参赛作品感兴趣主题(来自Raymond Chen的意见箱)。

他是他。你们都想知道我的解决方案吗?

我正在使用一个名为ImageMagic的程序将我的200MB PDF文件转换为JPG。在冗长的过程结束时,它按数字顺序序列化所有文件...因此,基本上文件创建日期在每个文件被写入硬盘驱动器时略有增加。因此,以下两个批处理文件命令之一将以“正确”顺序写入文件:

dir *.jpg /ODN /B > files.txt

for /f "tokens=*" %%a in ('dir *.jpg /ODN /B') do (
    echo ^<page^>%%a^</page^> >>pages.xml.fragment
)

因此 dir * .jpg / OD 命令通过升序(创建?)日期对目录内容进行排序,我们可以完全忽略实际的文件名。

目前还没有可以自然排序的内置命令行工具。如果您需要,请投票赞成该功能,让微软改变主意

然而,这可以通过正则表达式替换来模拟。在Windows上,您可以使用Jscript和VBS来执行此操作。但最简单的方法是使用PowerShell。您可以像cmd.exe这样从

中调用它
powershell -Command "(Get-ChildItem | Sort-Object { [regex]::Replace(

目前还没有可以自然排序的内置命令行工具。如果您需要,请投票赞成该功能,让微软改变主意

然而,这可以通过正则表达式替换来模拟。在Windows上,您可以使用Jscript和VBS来执行此操作。但最简单的方法是使用PowerShell。您可以像cmd.exe这样从

中调用它
@echo off
setlocal enabledelayedexpansion
for %%a in (*.txt) do (
    set num=00000000000000000000%%a
    set num=!num:~-20!
    set $!num!=%%a
)
for /f "tokens=1,* delims==" %%a in ('set <*>') do echo %%b

当然,如果您的文件包含更长的数字系列,您需要更改 PadLeft(20)中的数字

如何按照Windows资源管理器的方式按文件名排序?

可以在中找到本机批处理解决方案 如果您的文件最后只有一个数字,请自然地批量文件排序

<*>.Name, '\d+', { $args[0].Value.PadLeft(20) }) }).Name"

当然,如果您的文件包含更长的数字系列,您需要更改 PadLeft(20)中的数字

如何按照Windows资源管理器的方式按文件名排序?

可以在中找到本机批处理解决方案 如果您的文件最后只有一个数字,请自然地批量文件排序

<*>
来自 JPSoft 的4NT / TCC / TC默认使用自然排序顺序;或者,如果您可以访问GNU“sort”,那么程序,例如 Cygwin工具,您可以执行类似“ls -1 |”的操作。 / bin / sort -g&quot;或“dir / b | \ cygwin \ bin \ sort -g&quot ;;这将以自然排序顺序为您提供文件名。

如果您受限于Windows原生的工具,您可以尝试 Windows Scripting工具,并使用FileSystemObject获取文件名,使用正则表达式提取文件名的数字部分,以用作Dictionary对象中的键。我会将实际编码作为练习留给读者:)

不,没有办法做到这一点。 Windows资源管理器使用不同的方法来处理此问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top