' DIR2COP(1.1)  Convert Directory into Copy BAT        11/07/2005-12/13/2005
' --------------------------------------------------------------------------
' Copyright (C) 2005 by Vladimir Veytsel                       www.davar.net

' Type ---------------------------------------------------------------------

'    Procedure

' Parameter ----------------------------------------------------------------

'    1. Full path to the directory to be ordered.

' Necessity ----------------------------------------------------------------

'    The need for this procedure arises from the typical situation when
'    files get placed into directory in the random order, while processing
'    is required in alphabetical order.  One example is song or narration
'    directory that gets ordered by numeric prefixes to the file names to
'    avoid dealing with playlists, which require some effort to maintain,
'    and that might be not supported by portable MP3 player.

' Approach -----------------------------------------------------------------

'  - Three files were copied in the newly created directory "Test".
'    Files were intentionally copied in the REVERSE alphabetical order.

'    DIR command shows file names in the alphabetical order.

'    C:\> DIR /B E:\Manual\PDF\Test

'    Solaris_Beginnings_(IBM_MQS_51_1999)_amqdac0x.pdf
'    Solaris_Beginnings_(IBM_MQS_52_2001)_amqdac03.pdf
'    Solaris_Beginnings_(IBM_MQS_53_2002)_amqdac05.pdf

'    TREE command shows the ACTUAL file order - REVERSE alphabetical.

'    C:\> TREE /A /F E:\Manual\PDF\Test

'    E:\Manual\PDF\Test
'    +--Solaris_Beginnings_(IBM_MQS_53_2002)_amqdac05.pdf
'    +--Solaris_Beginnings_(IBM_MQS_52_2001)_amqdac03.pdf
'    \--Solaris_Beginnings_(IBM_MQS_51_1999)_amqdac0x.pdf

'  - This batch script was used to order directory "Test" alphabetically.

'    C:\> TYPE C:\ORDERDIR.BAT

'    MD E:\Manual\PDF\ORDERDIR
'    COPY E:\Manual\PDF\Test\Solaris_Beginnings_(IBM_MQS_51_1999)_amqdac0x.pdf E:\Manu
'    al\PDF\ORDERDIR
'    COPY E:\Manual\PDF\Test\Solaris_Beginnings_(IBM_MQS_52_2001)_amqdac03.pdf E:\Manu
'    al\PDF\ORDERDIR
'    COPY E:\Manual\PDF\Test\Solaris_Beginnings_(IBM_MQS_53_2002)_amqdac05.pdf E:\Manu
'    al\PDF\ORDERDIR
'    DEL /Y E:\Manual\PDF\Test\*.*
'    RD E:\Manual\PDF\Test
'    REN E:\Manual\PDF\ORDERDIR E:\Manual\PDF\Test

'  - Batch script execution.

'    C:\> C:\ORDERDIR.BAT

'    E:\Manual\PDF\Test\Solaris_Beginnings_(IBM_MQS_51_1999)_amqdac0x.pdf => E:\Manual
'    \PDF\ORDERDIR\Solaris_Beginnings_(IBM_MQS_51_1999)_amqdac0x.pdf
'         1 file copied
'    E:\Manual\PDF\Test\Solaris_Beginnings_(IBM_MQS_52_2001)_amqdac03.pdf => E:\Manual
'    \PDF\ORDERDIR\Solaris_Beginnings_(IBM_MQS_52_2001)_amqdac03.pdf
'         1 file copied
'    E:\Manual\PDF\Test\Solaris_Beginnings_(IBM_MQS_53_2002)_amqdac05.pdf => E:\Manual
'    \PDF\ORDERDIR\Solaris_Beginnings_(IBM_MQS_53_2002)_amqdac05.pdf
'         1 file copied
'    Deleting E:\Manual\PDF\Test\Solaris_Beginnings_(IBM_MQS_53_2002)_amqdac05.pdf
'    Deleting E:\Manual\PDF\Test\Solaris_Beginnings_(IBM_MQS_52_2001)_amqdac03.pdf
'    Deleting E:\Manual\PDF\Test\Solaris_Beginnings_(IBM_MQS_51_1999)_amqdac0x.pdf
'         3 files deleted       1,445,888 bytes freed
'    E:\Manual\PDF\ORDERDIR -> E:\Manual\PDF\Test
'         1 file renamed

'  - TREE command shows the ACTUAL file order - ALPHABETICAL
'    (result of directory reordering).

'    C:\> TREE /A /F E:\Manual\PDF\Test

'    E:\Manual\PDF\Test
'    +--Solaris_Beginnings_(IBM_MQS_51_1999)_amqdac0x.pdf
'    +--Solaris_Beginnings_(IBM_MQS_52_2001)_amqdac03.pdf
'    \--Solaris_Beginnings_(IBM_MQS_53_2002)_amqdac05.pdf

' Example ------------------------------------------------------------------

'  - E:\Manual\PDF\Test  - Parameter: FULL path to directory to be ordered

'  - List of directory files is expected to be found in C:\ORDERDIR.LST
'    (created by "DIR /B E:\Manual\PDF\Test > C:\ORDERDIR.LST" command)

'    Solaris_Beginnings_(IBM_MQS_51_1999)_amqdac0x.pdf
'    Solaris_Beginnings_(IBM_MQS_52_2001)_amqdac03.pdf
'    Solaris_Beginnings_(IBM_MQS_53_2002)_amqdac05.pdf

'  - Program DIR2COP generates C:\ORDERDIR.BAT based on the path specified
'    by program parameter, and the alphabetical list of directory files.

'    MD E:\Manual\PDF\ORDERDIR
'    COPY E:\Manual\PDF\Test\Solaris_Beginnings_(IBM_MQS_51_1999)_amqdac0x.pdf E:\Manual\PDF\ORDERDIR
'    COPY E:\Manual\PDF\Test\Solaris_Beginnings_(IBM_MQS_52_2001)_amqdac03.pdf E:\Manual\PDF\ORDERDIR
'    COPY E:\Manual\PDF\Test\Solaris_Beginnings_(IBM_MQS_53_2002)_amqdac05.pdf E:\Manual\PDF\ORDERDIR
'    DEL /Y E:\Manual\PDF\Test\*.*
'    RD E:\Manual\PDF\Test
'    REN E:\Manual\PDF\ORDERDIR E:\Manual\PDF\Test

' Notes --------------------------------------------------------------------

'  - An important presumption for described functionality is that the drive
'    specified in the path has enough space to duplicate all directory files.

'  - Program is designed to work from within batch script, so any validations
'    are omitted.

' External SubProgram Library ----------------------------------------------

     $LINK "MODULE.PBL"

' External Functions -------------------------------------------------------

     DECLARE FUNCTION REVERSE$(Strng$)
     DECLARE FUNCTION TAILSTR$(Strng$,Delim$)

' Start Procedure ----------------------------------------------------------

     DEFINT A-Z  ' All defaulted variables are integer

' Get Control Parameter ----------------------------------------------------

     Parm$=COMMAND$
'    Parm$="E:\Manual\PDF\Test"

' Open Data Files ----------------------------------------------------------

     OPEN "C:\ORDERDIR.LST" FOR  INPUT AS #1
     OPEN "C:\ORDERDIR.BAT" FOR OUTPUT AS #2

' Convert ORDERDIR.LST into ORDERDIR.BAT File ------------------------------

     File.Path$=REVERSE$(TAILSTR$(REVERSE$(Parm$),"\"))
     PRINT #2,"MD ";File.Path$;"\ORDERDIR"

     WHILE NOT EOF(1)
           LINE INPUT #1,File.Name$
           PRINT #2,"COPY ";Parm$;"\";File.Name$;" ";File.Path$;"\ORDERDIR"
     WEND

     PRINT #2,"DEL /Y ";Parm$;"\*.*"
     PRINT #2,"RD ";Parm$
     PRINT #2,"REN ";File.Path$;"\ORDERDIR";" ";Parm$

' Finish Program -----------------------------------------------------------

     CLOSE
     END
