Hani Goc
Hani Goc

Reputation: 2441

Sort files by name and number

I am trying to sort the following list of files

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

As you can see it starting with 10, 11, 12 ..... then back to 1.

How can i sort them in this correct order?

  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

I can use a batch file or even a simple code.

Thank you.

EDIT:

I USED THE FOLLOWING COMMAND TO READ THE FILES

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

Upvotes: 1

Views: 190

Answers (5)

captcha
captcha

Reputation: 3756

just use a batch oneliner on the cmd prompt:

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

Note: this might not work with XP, still not tested.

Upvotes: 2

Aacini
Aacini

Reputation: 67216

The other answers sort the list of names; this mean that you must run the program every time you want the files sorted in order. The Batch program below renames the files, so you must run it just one time and then the files will appear sorted no matter how you access they.

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

Upvotes: 1

LS_ᴅᴇᴠ
LS_ᴅᴇᴠ

Reputation: 11161

This batch will create a files.tx0 (with ##### filename), then files.tx1 (ordered files.tx0) and then read files part from files.tx1 to files.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

Upvotes: 1

Satish
Satish

Reputation: 17417

Here you go! (Only for Linux)

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

Output:

# 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

Save file (redirect output using > )

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

Upvotes: 1

aayoubi
aayoubi

Reputation: 12069

The first list is sorted in lexicographical order.

Can you add one more zero to the files [1..9] ?

Using cmd, dir /O will sort the files in lexicographical order.

Upvotes: 1

Related Questions