2014-02-03 8 views
-1

Мне нужно переименовать PDF-файлы, чтобы имя файла имело определенную длину. имена файлов inpu будут 123456_1.pdf, 123_25.pdf и выход должен быть 000.pdf, 000000013025.pdf. Перед номером _ номер должен быть заполнен до 10 символов нулями и после _ заполнен до 3 символов. цифры до и после _ являются variabel. Это номера customer_account. заблаговременнопакетное переименование файлов условный формат

+0

Ну новичок в этом, я нашел разные сценарии, которые говорят, как вы можете редактировать первое число символов с помощью ??????? _ ??? 000 ??? 00? но я не мог найти, как объявить числа как variabel. количество нулей, которые необходимо разместить, зависит от ввода. Цель состоит в попытке сценария, когда у меня есть эта информация. – user3266251

ответ

1

Важно, чтобы имена, соответствующие вашему стартовому шаблону, были переименованы.

В DIR/B перечислены все файлы PDF, а FINDSTR хранит файлы, которые имеют все цифры до и после _. Операторы IF убеждаются, что первое число не превышает 10 цифр, а второе число не превышает 3 цифры.

Наконец, классическая техника используется для заполнения чисел до заданной длины. Префикс каждого номера со строкой нулей, затем используйте операцию подстроки, чтобы сохранить правильное количество правой стороны.

@echo off 
setlocal enableDelayedExpansion 
for /f "tokens=1,2 delims=_." %%A in (
    'dir /b /a-d *.pdf^|findstr /rix "[0-9]*_[0-9]*\.pdf"' 
) do (
    set "part1=%%A" 
    set "part2=%%B" 
    if "!part1:~0,10!" equ "!part1!" if "!part2:~0,3!" equ "!part2!" (
    set "part1=0000000000%%A" 
    set "part2=000%%B" 
    ren "%%A_%%B.pdf" "!part1:~-10!!part2:~-3!.pdf" 
) 
) 

Ниже совершенно другой способ, использующий REPL.BAT - a hybrid JScript/batch utility, который выполняет поиск по регулярному выражению и заменить на стандартном ввод и записывает результат на стандартный вывод. Утилита представляет собой чистый скрипт, который будет запускаться изначально на любой современной машине Windows с XP. В утилиту встроена полная документация. REPL.BAT должен быть размещен где-то внутри вашего PATH.

Предложение FOR IN() использует продолжение строки для удобства чтения. Он работает так же хорошо, как и одна непрерывная линия.

DIR/B просто перечисляет все файлы PDF.

Первый REPL соответствует только именам, состоящим из 1-10 цифр, а затем _, а затем 1-3 разряда, а затем .pdf. Он переформатирует название следующим образом: originalName:000000000FirstNumber_00SecondNumber.pdf.

Второй REPL сохраняет исходное имя нетронутым, а затем переформатирует новое имя, сохраняя только правильные 10 цифр первого номера и правые самые 3 цифры второго номера, плюс расширение.

FOR/F анализирует каждый результат на оригинальное имя и новое имя, чтобы каждый файл можно было переименовать.

@echo off 
for /f "tokens=1,2 delims=:" %%A in (
    'dir /b *.pdf^|^ 
    repl "^([0-9]{1,10})_([0-9]{1,3})\.pdf$" "$&:000000000$1_00$2.pdf" ai^|^ 
    repl "(.*:).*(.{10})_.*(.{3}\.pdf)" "$1$2$3"' 
) do ren "%%A" "%%B" 
1

Попробуйте это:

@echo off 
setlocal enabledelayedexpansion 

pushd c:\temp 
for /f "tokens=1,2 delims=_." %%a in ('dir /b *.pdf') do (
    set num1=0000000000%%a 
    set num1=!num1:~-10! 
    set num2=000%%b 
    set num2=!num2:~-3! 
    echo ren %%a_%%b.pdf !num1!!num2!.pdf 
) 

Удалить эхо, чтобы сделать фактическое переименование.

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