【问题标题】:Sort files by name and number按名称和编号对文件进行排序
【发布时间】:2013-09-24 14:27:57
【问题描述】:

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

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

【问题讨论】:

    标签: file sorting batch-file


    【解决方案1】:

    只需在 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,尚未经过测试。

    【讨论】:

      【解决方案2】:

      给你! (仅适用于 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
      

      【讨论】:

      • 嗯,这是 unix 愚蠢的我。 lololol 我在 Dos 中给了我一个错误。那么我会跳到unix。我会马上做,几分钟就可以了
      • 这是一个目录列表还是一个包含所有数据的文件。
      • 在目录中它们被正确排序。但是一旦我使用批处理文件复制每个路径,我就会得到上面的列表。使用的批处理文件: echo off for /r %%a in (*.xml) do echo %%a >> get_files.txt
      • 我会说将文件复制到Unix/Linux 并对其进行排序:)
      • 好吧好吧几乎明白了只是一个更正我认为它应该是#sort -t $'-' -k2 -n file.txt(K2而不是K3),我怎样才能保存排序文件?所以让我看看我是否做对了:你标记了文件并使用了第三部分,即数字。哎呀,这真的很聪明
      【解决方案3】:

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

      你能在文件[1..9] 中再加一个零吗?

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

      【讨论】:

      • 嗨,Ayoubi,添加一个零,例如 0001 -> 00001
      • 是的,应该这样做。
      【解决方案4】:

      这批将创建一个files.tx0(带有##### filename),然后是files.tx1(订购files.tx0),然后从files.tx1files.txt 读取文件部分:

      DEL files.tx0
      SETLOCAL ENABLEDELAYEDEXPANSION
      FOR /R %%a IN (*.xml) DO FOR /F "DELIMS=- TOKENS=3" %%b IN ("%%~na") DO (
          SET N=0%%b
          ECHO !N:~-5! %%a>>files.tx0
      )
      SORT files.tx0 >files.tx1
      DEL files.txt
      FOR /F "TOKENS=1,*" %%i IN (files.tx1) DO >>files.txt ECHO %%j
      

      【讨论】:

        【解决方案5】:

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

        @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"
           )
        )
        

        【讨论】:

          猜你喜欢
          • 2021-07-06
          • 1970-01-01
          • 2011-07-12
          • 2011-05-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多