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

Я пытаюсь изменить пакетный файл, созданный кем-то другим, чтобы добавить ведущие нули в зависимости от числа, найденного в строке 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