按名称和编号对文件进行排序

时间:2013-09-24 14:27:57

标签: file sorting batch-file

我正在尝试对以下文件列表进行排序

C:\DOCUMENTS\FLUX Melange\MultiXml\ACC-BANQUE_76401-00010-R.xml
C:\DOCUMENTS\FLUX Melange\MultiXml\ACC-BANQUE_76401-00011-R.xml
C:\DOCUMENTS\FLUX Melange\MultiXml\ACC-BANQUE_76401-00012-R.xml
C:\DOCUMENTS\FLUX Melange\MultiXml\ACC-BANQUE_76401-00013-R.xml
C:\DOCUMENTS\FLUX Melange\MultiXml\ACC-BANQUE_76401-00014-R.xml
C:\DOCUMENTS\FLUX Melange\MultiXml\ACC-BANQUE_76401-00015-R.xml
C:\DOCUMENTS\FLUX Melange\MultiXml\ACC-BANQUE_76401-00016-R.xml
C:\DOCUMENTS\FLUX Melange\MultiXml\ACC-BANQUE_76401-0001-R.xml
C:\DOCUMENTS\FLUX Melange\MultiXml\ACC-BANQUE_76401-0002-R.xml
C:\DOCUMENTS\FLUX Melange\MultiXml\ACC-BANQUE_76401-0003-R.xml
C:\DOCUMENTS\FLUX Melange\MultiXml\ACC-BANQUE_76401-0004-R.xml
C:\DOCUMENTS\FLUX Melange\MultiXml\ACC-BANQUE_76401-0005-R.xml
C:\DOCUMENTS\FLUX Melange\MultiXml\ACC-BANQUE_76401-0006-R.xml
C:\DOCUMENTS\FLUX Melange\MultiXml\ACC-BANQUE_76401-0007-R.xml
C:\DOCUMENTS\FLUX Melange\MultiXml\ACC-BANQUE_76401-0008-R.xml
C:\DOCUMENTS\FLUX Melange\MultiXml\ACC-BANQUE_76401-0009-R.xml

你可以看到从10,11,12开始.....然后回到1.

我如何按正确的顺序对它们进行排序?

  C:\DOCUMENTS\FLUX Melange\MultiXml\ACC-BANQUE_76401-0001-R.xml
    C:\DOCUMENTS\FLUX Melange\MultiXml\ACC-BANQUE_76401-0002-R.xml
    C:\DOCUMENTS\FLUX Melange\MultiXml\ACC-BANQUE_76401-0003-R.xml
    C:\DOCUMENTS\FLUX Melange\MultiXml\ACC-BANQUE_76401-0004-R.xml
    C:\DOCUMENTS\FLUX Melange\MultiXml\ACC-BANQUE_76401-0005-R.xml
    C:\DOCUMENTS\FLUX Melange\MultiXml\ACC-BANQUE_76401-0006-R.xml
    C:\DOCUMENTS\FLUX Melange\MultiXml\ACC-BANQUE_76401-0007-R.xml
    C:\DOCUMENTS\FLUX Melange\MultiXml\ACC-BANQUE_76401-0008-R.xml
    C:\DOCUMENTS\FLUX Melange\MultiXml\ACC-BANQUE_76401-0009-R.xml
    C:\DOCUMENTS\FLUX Melange\MultiXml\ACC-BANQUE_76401-00010-R.xml
    C:\DOCUMENTS\FLUX Melange\MultiXml\ACC-BANQUE_76401-00011-R.xml
    C:\DOCUMENTS\FLUX Melange\MultiXml\ACC-BANQUE_76401-00012-R.xml
    C:\DOCUMENTS\FLUX Melange\MultiXml\ACC-BANQUE_76401-00013-R.xml
    C:\DOCUMENTS\FLUX Melange\MultiXml\ACC-BANQUE_76401-00014-R.xml
    C:\DOCUMENTS\FLUX Melange\MultiXml\ACC-BANQUE_76401-00015-R.xml
    C:\DOCUMENTS\FLUX Melange\MultiXml\ACC-BANQUE_76401-00016-R.xml

我可以使用批处理文件甚至是简单的代码。

谢谢。

编辑:

我使用以下命令阅读文件

echo off
for /r %%a in (*.xml) do echo %%a >> get_files.txt

5 个答案:

答案 0 :(得分:2)

只需在cmd提示符下使用批量oneliner:

for /f "tokens=1*" %x in ('(for %a in ("C:\DOCUMENTS\FLUX Melange\MultiXml\*.xml"^) do @for /f "tokens=3 delims=-" %b in ("%~na"^) do @for /f "tokens=* delims=0" %c in ("%~b"^) do @set "sorty=000%c"^&call set "sorty=%sorty:~-4%"^&call echo %sorty% %a^)^|sort') do @echo %y

注意:这可能不适用于XP,仍未经过测试。

答案 1 :(得分:1)

第一个列表按字典顺序排序。

您可以在文件[1..9]中再添加一个零吗?

使用cmddir /O将按字典顺序对文件进行排序。

答案 2 :(得分:1)

你走了! (仅适用于Linux)

sort -t $'-' -k3 -n file.txt

输出:

# sort -t $'-' -k3 -n file.txt
C:\DOCUMENTS\FLUX Melange\MultiXml\ACC-BANQUE_76401-0001-R.xml
C:\DOCUMENTS\FLUX Melange\MultiXml\ACC-BANQUE_76401-0002-R.xml
C:\DOCUMENTS\FLUX Melange\MultiXml\ACC-BANQUE_76401-0003-R.xml
C:\DOCUMENTS\FLUX Melange\MultiXml\ACC-BANQUE_76401-0004-R.xml
C:\DOCUMENTS\FLUX Melange\MultiXml\ACC-BANQUE_76401-0005-R.xml
C:\DOCUMENTS\FLUX Melange\MultiXml\ACC-BANQUE_76401-0006-R.xml
C:\DOCUMENTS\FLUX Melange\MultiXml\ACC-BANQUE_76401-0007-R.xml
C:\DOCUMENTS\FLUX Melange\MultiXml\ACC-BANQUE_76401-0008-R.xml
C:\DOCUMENTS\FLUX Melange\MultiXml\ACC-BANQUE_76401-0009-R.xml
C:\DOCUMENTS\FLUX Melange\MultiXml\ACC-BANQUE_76401-00010-R.xml
C:\DOCUMENTS\FLUX Melange\MultiXml\ACC-BANQUE_76401-00011-R.xml
C:\DOCUMENTS\FLUX Melange\MultiXml\ACC-BANQUE_76401-00012-R.xml
C:\DOCUMENTS\FLUX Melange\MultiXml\ACC-BANQUE_76401-00013-R.xml
C:\DOCUMENTS\FLUX Melange\MultiXml\ACC-BANQUE_76401-00014-R.xml
C:\DOCUMENTS\FLUX Melange\MultiXml\ACC-BANQUE_76401-00015-R.xml
C:\DOCUMENTS\FLUX Melange\MultiXml\ACC-BANQUE_76401-00016-R.xml

保存文件(使用>重定向输出)

sort -t $'-' -k3 -n file.txt > new_formated_file

答案 3 :(得分:1)

此批次将创建files.tx0(包含##### filename),然后files.tx1(有序files.tx0),然后从files.tx1到{{ 1}}:

files.txt

答案 4 :(得分:1)

其他答案排序名称列表;这意味着每次要按顺序排序文件时都必须运行程序。 下面的批处理程序重命名文件,因此您必须只运行一次,然后无论您如何访问它们,文件都会显示为已排序。

@echo off
setlocal EnableDelayedExpansion
for /F "tokens=1-4 delims=-" %%a in ('dir /B /S /A-D *.xml') do (
   set number=%%c
   if "!number:~4!" equ "" (
      set pth=%%a
      ren "%%a-%%b-%%c-%%d" "!pth:~-3!-%%b-0%%c-%%d"
   )
)