Добавете водещи нули към име на файл

Опитвам се да модифицирам пакетен файл, създаден от някой друг, за да добавя водещи нули в зависимост от числото, намерено на ред 4 на файла. Действителното име на файл е конкатенация на името, намерено на ред 3, и числата на ред 4. Така че, ако първите няколко реда са както следва:

3.1.19
-1
TEST
560

Името на файла ще бъде v_TEST00560.TXT. Както можете да видите, общият брой цифри в името на файла трябва да бъде 5. Ако числото, което се появява на ред 4, е 8 (вижте по-долу), тогава:

3.1.19
-1
TEST
8

Името на файла ще бъде v_TEST00008.txt. Файлът, който имам, е както следва:

@Echo Off 

Setlocal EnableDelayedExpansion

REM File: rename5.bat
REM The script will look for and parse one (or more) input files 
REM Input files can containrecords for one or more vessels.
REM This script assumes that each record starts with the "3.1.19" string.

REM %%%%%%%%%%%%%%%%%%%%%%% Configuration Section %%%%%%%%%%%%%%%%%%%%%%%

SET INPUT_DIR=C:\Files\RenameFileName\Input
SET OUTPUT_DIR=C:\Files\RenameFileName\Output
SET ARCHIVE_DIR=C:\Files\RenameFileName\Archive
SET TEMP_DIR=C:\Files\RenameFileName\tmp
SET INPUT_FILENAME=INTERFACE.TXT
SET REC=3.1.19

REM %%%%%%%%%%%%%%%%%%%%%%%%%%%% Checking Section %%%%%%%%%%%%%%%%%%%%%%%%%%%%

FOR /F "usebackq tokens=* eol= delims= " %%d IN (`date /t`) do SET RUNDATE=%%d
echo [%RUNDATE% %TIME%] Script starting...

IF NOT EXIST %INPUT_DIR% (
    SET MESSAGE=Input directory not found.
    goto END
)

IF NOT EXIST %OUTPUT_DIR% (
    SET MESSAGE=Output directory not found.
    goto END
)

IF NOT EXIST %ARCHIVE_DIR% (
    SET MESSAGE=Archive directory not found.
    goto END
)

IF NOT EXIST %TEMP_DIR% (
    echo Temporary directory does not exit. 
    echo Creating %TEMP_DIR%
    mkdir %TEMP_DIR%
)


REM %%%%%%%%%%%%%%%%%%%%%%%%% Main Processing %%%%%%%%%%%%%%%%%%%%%%%%% 

dir %INPUT_DIR%\%INPUT_FILENAME% 1>NUL 2>NUL
IF %ERRORLEVEL% EQU 1 (
    SET MESSAGE=Input files not present.
    goto END
) 

FOR /F "usebackq tokens=* eol= delims= " %%d IN (`date /t`) do SET RUNDATE=%%d
echo [%RUNDATE% %TIME%] Input files found. Start Processing...

FOR /F "usebackq" %%I IN (`dir /b %INPUT_DIR%\%INPUT_FILENAME%`) DO (
    SET INPUT_FILE=!INPUT_DIR!\%%I
    echo READING Input file: !INPUT_FILE!

    SET N=
    FOR /F "tokens=* eol= delims= "  %%A IN (!INPUT_FILE!) Do (
        set LINE=%%A
        set LINE2=!LINE:~0,6!
        if !LINE2! EQU !REC! (
            SET /A N+=1
            echo Creating temp file !TEMP_DIR!\!N!.tmp
        )
        echo !LINE! >> !TEMP_DIR!\!N!.tmp
    )

    FOR /F "usebackq" %%Y in (`dir /b !TEMP_DIR!\*.tmp`) DO (
        SET TEMPFILE=!TEMP_DIR!\%%Y
        SET N=
        FOR /F %%A IN (!TEMPFILE!) DO (
            SET /A N+=1
            IF !N! EQU 3 SET S=%%A
            IF !N! EQU 4 SET T=%%A
        )
        SET S=!S:~0,10!
        SET T=!T:~0,10!

        echo CREATING Output File: %OUTPUT_DIR%\V_!S!00!T!.TXT
        MOVE !TEMPFILE!  %OUTPUT_DIR%\V_!S!00!T!.TXT
    )
)

REM %%%%%%%%%%%%%%%%%%%%%%%%% Archiving Section %%%%%%%%%%%%%%%%%%%%%%%%% 

FOR /F "usebackq" %%t IN (`cscript "%~dp0timestamp.vbs" //Nologo`) do SET TIMESTAMP=%%t

FOR /F "usebackq" %%I IN (`dir /b %INPUT_DIR%\%INPUT_FILENAME%`) DO (
    echo ARCHIVING Input file %%I to %ARCHIVE_DIR%
    rem COPY !INPUT_DIR!\%%I !ARCHIVE_DIR!\%%I.!TIMESTAMP!
    MOVE !INPUT_DIR!\%%I !ARCHIVE_DIR!\%%I.!TIMESTAMP!
)

REM %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

FOR /F "usebackq tokens=* eol= delims= " %%d IN (`date /t`) do SET RUNDATE=%%d
SET MESSAGE=[%RUNDATE% %TIME%] Processing Done.

:END
echo %MESSAGE%
FOR /F "usebackq tokens=* eol= delims= " %%d IN (`date /t`) do SET RUNDATE=%%d
echo [%RUNDATE% %TIME%] Script finished. 

Както можете да видите, това е доста сложно и нямам представа как да направя тези промени сам. BAT работи перфектно, но броят на нулите е фиксиран и не се генерира в зависимост от броя на вече присъстващите цифри. Всяка помощ оценявам


person Delphi    schedule 18.01.2012    source източник


Отговори (1)


Нямам намерение да чета целия ви код, но използвам това за допълване на нули.

Първият ред е каквото и да е число, което четете от вашия файл.
Вторият ред добавя повече от достатъчно нули в началото на променливата.
Третият ред отрязва всички символи от променливата освен последните пет.

Set Number=123

Set Number=00000%Number%
Set Number=%Number:~-5%
person Hand-E-Food    schedule 18.01.2012
comment
Страхотен отговор...не знам как го забравих. - person aphoria; 19.01.2012
comment
Здравейте и благодаря за отговора. Не съм наясно, когато става въпрос за писане на скриптове, така че този допълнителен въпрос не трябва да ви изненадва. Как да накарам скрипта да избере числото от ред 4? - person Delphi; 19.01.2012
comment
Здравей отново. Разбрах го. Благодаря отново. - person Delphi; 19.01.2012