2016-08-25 5 views
1

У меня есть скрипт, который добавляет нули в имя файла, если имя файла меньше 18 цифр.переименование файла с помощью пакетного скрипта

Например, если имя файла 1234567, то он должен переименовать его в 0000000000 и если это 123456789, то это делает его 00000000. Мой код уже делает эту функциональность

Теперь мое требование заключается в том, что если имя файла 1234567-1, то он должен сделать это 0000000000_Type_1 и если имя 1234567-a, то он должен переименовать его в 0000000000_Type_a.

Это означает, что он должен продолжать делать то, что делает мой скрипт, но в дополнение к этому он должен быть суффикс _Type_<last character> в имени файла. Имя файла может быть 1234567 или 123456789 или 1234567-1 или 12345678-b или любая вещь, но всегда есть цифры, а не символы перед дефисом (-). В папке может быть несколько файлов. Hyphens (-) следует заменить символом подчеркивания (_), за которым следует Type_, а также как последний символ в имени файла.

Вот мой существующий код:

@echo off 
setlocal enableextensions enabledelayedexpansion 

rem iterate over tif files: 
for %%f in (C:\Task\Drop_Files\*.tif) do (
    rem store file name without extension 
    set FileName=%%~nf 

    rem Add leading zeroes: 
    set FileName=00000000000000000!FileName! 

    set FileName=!FileName:~-18! 

    set FileName=!FileName!%%~xf 

    rem Rename the file 
    rename "%%f" "!FileName!" 

) 

ответ

1

Следующий скрипт должен обрабатывать файлы с суффиксом дефис (как 1234567-1) и без него (как 1234567), как вы хотите:

@echo off 
setlocal enableextensions enabledelayedexpansion 

rem Iterate over TIF files: 
for %%f in ("%~dp0*.tif") do (
    rem Store file name without extension: 
    set "FileName=%%~nf" 

    rem Split off hyphen and suffix: 
    set "Suffix=!FileName:*-=!" 
    if "!Suffix!"=="!FileName!" set "Suffix=" 
    call set "FileName=%%FileName:-!Suffix!=%%" 
    if defined Suffix set "Suffix=_Type_!Suffix!" 

    rem Add leading zeroes: 
    set "FileName=00000000000000000!FileName!" 

    rem Build final file name: 
    set "FileName=!FileName:~-18!!Suffix!" 

    rem Rename the file: 
    rename "%%~ff" "!FileName!%%~xf" 
) 

Что я сделал:

  • введен новая переменная Suffix, которая будет содержать символ после дефиса (например, 1, когда имя файла 1234567-1); суффикс, включающий дефис (например, -1), будет удален из имени файла (это может быть неудачно в случае, если -1 произошло более одного раза в имени файла);
  • улучшенный set синтаксис путем добавления котировок вокруг выражения присваивания;
+0

Если исходное имя файла 0000000000012783_1, то ваш код создает имя файла как 0000000000012783_1_Type_0000000012783_1. Он должен быть 0000000000012783_Type_1. Не могли бы вы посоветовать, что делать? – shuru

+0

Извините, я не смог применить замедленное расширение для 'Суффикса' один раз - см. Мой [edit] (http://stackoverflow.com/revisions/39150386/2) ... – aschipfl

+0

... Это сработало ....спасибо – shuru

0

Я думаю, что следующий, слегка измененный код, должен делать то, что вы ищете. В принципе, вам нужно проверить, является ли следующий символ последним тире (-), и в этом случае вы заменяете его _Type_. Для этого вы извлекаете последние 2 символа FileName (без расширения), а затем просматриваете первый символ этих двух извлеченных символов. Если это тире, вы удаляете последние два символа из исходного имени файла, потому что в конечном итоге они будут заменены новой конструкцией _Type_ [char].

@echo off 
setlocal enableextensions enabledelayedexpansion 

rem iterate over tif files: 
for %%f in (C:\tests\output*.txt) do (
    rem store file name without extension 
    set FileName=%%~nf 
    set IsDash=!FileName:~-2! 
    set IsDash=!IsDash:~0,1! 
    IF "!IsDash!" == "-" (
     SET FileType=_Type_!FileName:~-1! 
     SET FileName=!FileName:~0,-2! 
    ) ELSE (
     SET FileType= 
    ) 

    rem Add leading zeroes: 
    set FileName=00000000000000000!FileName! 

    set FileName=!FileName:~-18!!FileType! 

    set FileName=!FileName!%%~xf 
    rem Rename the file 
    rename "%%f" "!FileName!" 
) 
0
@echo off 
setlocal enableextensions enabledelayedexpansion 

rem Change current directory 
cd /D C:\Task\Drop_Files 

rem Iterate over tif files: 
for /F "tokens=1-3 delims=-." %%f in ('dir /B *.tif') do (

    rem Store file name without extension and leading zeroes: 
    set "FileName=00000000000000000%%f" 

    rem Get the right type and input name: 
    rem - If input name is "1234567.tif" then "%%h" is empty, so there is no Type part 
    rem - If input name is "1234567-1.tif" then "%%h" is "tif", so the Type is "_Type_%%g" 
    if "%%h" equ "" (
     set "input=%%f.%%g" 
     set "type=" 
    ) else (
     set "input=%%f-%%g.%%h" 
     set "type=_Type_%%g" 
    ) 

    rem Rename the file 
    rename "!input!" "!FileName:~-18!!type!.tif" 

) 
1

Simple. В вашем исходном коде перед линией «Переименовать» просто добавьте следующую строку:

set FileName=!FileName:-=_Type_! 

Вот и все!

+0

Это приведет к числовой части с 16 цифрами только для файлов, суффиксных с дефисной частью ... – aschipfl

+0

@aschipfl Спасибо за ваши отзывы, но можете ли вы дать мне пример имени файла, для которого мое решение не будет " т работы? –

+1

Например: '1234567-1'; результатом будет '00000000_Type_1' (16 цифр только до' _Type_', хотя должно быть 18) ... – aschipfl

Смежные вопросы