【问题标题】:Sort file name with delimiter in batch file在批处理文件中使用分隔符对文件名进行排序
【发布时间】:2013-07-26 18:56:24
【问题描述】:

我需要在 Windows 批处理脚本中按版本号至少对文件名列表进行排序。 文件名如下:

2_0_0to2_0_1
2_0_1_to2_0_2
...
2_0_12_to2_0_13
...

我在 Windows 中尝试过 dir 和 sort ,但它似乎只查看在两位数的情况下不起作用的 char 位置。在 Linux 中,我使用以下方法完成了此操作: ls *.txt |排序 -n -t _ -k1 -k2 -k3。如何在 Windows 上执行此操作。请帮忙。谢谢!

【问题讨论】:

  • AFAIK:Windows 没有任何本机自然排序实用程序。您必须下载第 3 方工具。尝试在这个unxutils.sourceforge.net中排序
  • 感谢您的指点。但该工具不支持排序功能。
  • 你能按日期/时间排序得到你想要的吗?

标签: windows sorting batch-file cmd


【解决方案1】:

试试这个:

@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

【讨论】:

  • 聪明的解决方案Endoro,排序可能不需要/r。我在 0 之前的 1 之前得到 12。否则效果很好。 OP 可能需要进一步填充,但这很容易。
  • @foxidrive 非常感谢您的评论。我的英语不是最好的,所以我不确定with least first 是什么意思?
  • 最少优先表示较少优先,或最低数字优先。所以 2.0.0 然后是 2.0.1 然后是 2.0.12
  • 感谢你们两位的完美回答。但我还有一个问题。我明白你的剧本,直到最后。什么是'设置“$”'?在将变量存储在之前的 2 个 for 循环中之后,我看不到变量是如何排序的。
  • 你的答案是完美的。谢谢恩多罗。但是我看不到文件名的顺序。你能帮忙吗?我是新来的。在我看来,您设置了 $xyz=abc,然后假设 $xyz 已排序,从已排序的 $xyz 映射中检索 abc。
猜你喜欢
  • 1970-01-01
  • 2021-05-21
  • 1970-01-01
  • 2013-08-24
  • 1970-01-01
  • 2010-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多