Windows 在批处理文件中使用分隔符对文件名进行排序

Windows 在批处理文件中使用分隔符对文件名进行排序,windows,sorting,batch-file,cmd,Windows,Sorting,Batch File,Cmd,在windows批处理脚本中,我需要按文件名的版本号对文件名列表进行排序,至少要排在第一位。 文件名如下所示: 2_0_0to2_0_1 2_0_1_to2_0_2 ... 2_0_12_to2_0_13 ... 我在Windows中尝试过dir和sort,但它似乎只查看字符位置,这在两位数的情况下不起作用。在Linux中,我使用了:ls*.txt | sort-n-t |-k1-k2-k3。如何在Windows上执行此操作。请帮忙。谢谢 试试这个: @ECHO OFF &SETLOC

在windows批处理脚本中,我需要按文件名的版本号对文件名列表进行排序,至少要排在第一位。 文件名如下所示:

2_0_0to2_0_1
2_0_1_to2_0_2
...
2_0_12_to2_0_13
...
我在Windows中尝试过dir和sort,但它似乎只查看字符位置,这在两位数的情况下不起作用。在Linux中,我使用了:ls*.txt | sort-n-t |-k1-k2-k3。如何在Windows上执行此操作。请帮忙。谢谢

试试这个:

@ECHO OFF &SETLOCAL ENABLEDELAYEDEXPANSION
FOR %%x IN (*) DO (
    FOR /f "tokens=1-6delims=_to" %%a IN ("%%~x") DO (
        SET "g1=0%%a"
        SET "g2=0%%b"
        SET "g3=0%%c"
        SET "g4=0%%d"
        SET "g5=0%%e"
        SET "g6=0%%f"
        SET "$!g1:~-2!!g2:~-2!!g3:~-2!!g4:~-2!!g5:~-2!!g6:~-2!=%%~x"
    )
)
FOR /f "tokens=2delims==" %%a IN ('set "$"') DO ECHO %%~a
试试这个:

@ECHO OFF &SETLOCAL ENABLEDELAYEDEXPANSION
FOR %%x IN (*) DO (
    FOR /f "tokens=1-6delims=_to" %%a IN ("%%~x") DO (
        SET "g1=0%%a"
        SET "g2=0%%b"
        SET "g3=0%%c"
        SET "g4=0%%d"
        SET "g5=0%%e"
        SET "g6=0%%f"
        SET "$!g1:~-2!!g2:~-2!!g3:~-2!!g4:~-2!!g5:~-2!!g6:~-2!=%%~x"
    )
)
FOR /f "tokens=2delims==" %%a IN ('set "$"') DO ECHO %%~a

AFAIK:Windows没有任何本机自然排序实用程序。您必须下载第三方工具。尝试在这里排序谢谢你的指针。但该工具不支持排序功能。您能按日期/时间排序以获得所需内容吗?AFAIK:Windows没有任何本机自然排序实用程序。您必须下载第三方工具。尝试在这里排序谢谢你的指针。但是该工具不支持排序功能。你能按日期/时间排序以得到你想要的吗?聪明的解决方案恩多,排序可能不需要/r。我在0之前1之前得到12。否则效果会很好。OP可能需要进一步填充,但这很容易。@foxidrive非常感谢您的评论。我的英语不是最好的,所以我不确定最少优先的
是什么意思?最少优先的意思是最少优先,还是最少优先。所以2.0.0,然后是2.0.1,接着是2.0.12感谢你们两位给出了完美的答案。但我还有一个问题。我理解你的剧本,直到最后一刻。什么是“设置“$”?我不知道在之前的2个for循环中存储变量之后,变量是如何排列的。你的答案很完美。谢谢你,恩多。但我看不出文件名是按顺序排列的。你能帮忙吗?我是新来的。在我看来,您设置了$xyz=abc,然后假设$xyz已排序,则从已排序的$xyz映射中检索abc。聪明的解决方案是,排序可能不需要/r。我在0之前1之前得到12。否则效果会很好。OP可能需要进一步填充,但这很容易。@foxidrive非常感谢您的评论。我的英语不是最好的,所以我不确定最少优先的
是什么意思?最少优先的意思是最少优先,还是最少优先。所以2.0.0,然后是2.0.1,接着是2.0.12感谢你们两位给出了完美的答案。但我还有一个问题。我理解你的剧本,直到最后一刻。什么是“设置“$”?我不知道在之前的2个for循环中存储变量之后,变量是如何排列的。你的答案很完美。谢谢你,恩多。但我看不出文件名是按顺序排列的。你能帮忙吗?我是新来的。在我看来,您设置了$xyz=abc,然后假设$xyz已排序,则从已排序的$xyz映射中检索abc。