2015-03-23 4 views
0

Это 3 части, которые приводят к 3 отличным ответам ниже Magoo.Как переименовать имена файлов между ними

Часть 1;

Это, например, имена файлов;

Дэн Уильямс x12c17 Форд Мустанг
Cindy STAN x11c17 Лексуса RSX
рэчел х x09c17 Ямаха Hayabusa 2008

---- Мне нужно, чтобы удалить все символы после C17


Часть 2 ;

Это, например, имена файлов;

Дэн Уильямс x12c01 Форд Мустанг
Cindy STAN x11c17 Лексуса RSX
рэчел х x09c90 Ямаха Hayabusa 2008

---- Мне нужно, чтобы удалить все символы после C** Где C17 может быть что-нибудь между C01-C90 ,


Часть 3;

Использование этих расширенных имен файлов;

Дэн Уильямс x12c01 NewYork брод mustang.xlsx
Cindy Стан x11c17 LEXUS NewYork rsx.xlsx
Рахиль х x09c90 Ямаха Hayabusa 2008 newyork.xlsx

---- Мне нужно удалить все после C**, как в часть 2, одновременно сохраняя слово newyork и помещая его в конец файла и сохраняя расширение файла.

Мысли?

+0

'переименовать * c17 * * c17' – Havenard

+0

Если раньше он пытался, он не работает. – blazin8s

+0

@ blazin8s, почему он не работает на вас? Решение, данное Хавендаром, должно делать то, что вы просите, - какая ошибка вы получаете? – unclemeat

ответ

2
@ECHO OFF 
SETLOCAL ENABLEDELAYEDEXPANSION 
SET "sourcedir=U:\sourcedir\t w o" 
PUSHD "%sourcedir%" 
FOR /f "delims=" %%a IN ('dir /b /a-d "*c17*" ') DO (
SET "filename=%%a" 
SET "filename=!filename:c17=:!" 
FOR /f "tokens=1delims=:" %%r IN ("!filename!") DO echo(REN "%%a" "%%rC17" 
) 
popd 

GOTO :EOF 

Вы должны были бы изменить установку sourcedir в соответствии с вашими обстоятельствами.

Необходимые команды REN - это всего лишь ECHO ed для целей тестирования. После того, как вы подтвердили правильность команд, измените ECHO(REN на REN, чтобы фактически переименовать файлы.

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


@ECHO OFF 
SETLOCAL ENABLEDELAYEDEXPANSION 
SET "sourcedir=U:\sourcedir\t w o" 
PUSHD "%sourcedir%" 
FOR /L %%v IN (101,1,190) DO (
SET /a cnum=%%v 
SET "cnum=c!cnum:~-2!" 
IF EXIST "*!cnum!*" (
    FOR /f "delims=" %%a IN ('dir /b /a-d "*!cnum!*" ') DO (
    SET "filename=%%a" 
    CALL SET "filename=%%filename:!cnum!=:%%" 
    FOR /f "tokens=1delims=:" %%r IN ("!filename!") DO ECHO(REN "%%a" "%%r!cnum!" 
) 
) 
) 
popd 

GOTO :EOF 

Revision к разрешить изменение номера. cnum присваивается 101 до 190 последовательно, а затем изменяется на c + последние 2 цифры, поэтому c01 .. c90.

Отсюда следует, что !cnum! для c17, но используйте конструкцию call set для замены в имени файла.


@ECHO OFF 
SETLOCAL ENABLEDELAYEDEXPANSION 
SET "sourcedir=U:\sourcedir\t w o" 
PUSHD "%sourcedir%" 
FOR /L %%v IN (101,1,190) DO (
SET /a cnum=%%v 
SET "cnum=c!cnum:~-2!" 
IF EXIST "*!cnum!*" (
    FOR /f "delims=" %%a IN ('dir /b /a-d "*!cnum!*" ') DO (
    SET "city=" 
    FOR %%n IN (newyork) DO ECHO %%a|FIND /i "%%n" >NUL & IF NOT ERRORLEVEL 1 SET "city=%%n" 
    SET "filename=%%a" 
    CALL SET "filename=%%filename:!cnum!=:%%" 
    FOR /f "tokens=1delims=:" %%r IN ("!filename!") DO ECHO(REN "%%a" "%%r!cnum!!city!%%~xa" 
) 
) 
) 
popd 

GOTO :EOF 

теперь будет вставить newyork и сохранить расширение, пересмотренный.

Если вы хотите пробел перед названием города, вставьте его после = в set city...

+0

Это прекрасно работает, спасибо. Мне также было интересно; вместо c17 числа действительно идут от c01 до c90.Я скопировал строки снова и снова c01 - c90 и только удлинил скрипт, и он отлично работает. Хотя мы все-таки находимся в этом, гораздо сложнее упростить это для повышения эффективности? Если это слишком много времени, не беспокойтесь об этом, я доволен этим. – blazin8s

+0

Блестящий и совершенный. Ты обалденный. Пока мы на нем, я думаю, что, черт возьми, я хотел бы поднять его еще на одну ступень для завершения. Я обновил свой первый пост, если вас интересует удивительный, если слишком много времени, не беспокойтесь. – blazin8s

+0

Большое спасибо Magoo. Я могу работать с этими кодами и настраивать их для обработки многих ежедневных применений переименования. Они отлично работают. Я отредактировал свой 1-й пост, чтобы более легко помогать другим отвечать на ваши ответы. : D – blazin8s

2

Я обычно использую мой JREN.BAT regluar expression rename utility для сложных операций переименования - это гораздо проще, чем писать пользовательский пакетный сценарий, и он выполняет лучше. JREN.BAT - это гибридный JScript/пакетный скрипт, который запускается изначально на любом компьютере Windows с XP.

Я поместил все свои утилиты в папку «c: \ utils» и включил эту папку в свой PATH.

Что касается вашего комментария к Magoo, я предполагаю, что если у вас есть имя файла с c99, вы также захотите переименовать его. Если да, то следующий один лайнер все, что вам нужно:

jren "(c\d\d).*" $1 

Добавьте опцию /I, если вы хотите, чтобы игнорировать регистр.

jren "(c\d\d).*" $1 /i 

Полная документация доступна с использованием jren /?. Вы можете использовать jren /? | more для просмотра справки по одной странице за раз. Но я настраиваю консольное окно с большим буфером, поэтому могу прокручивать вверх, чтобы увидеть прошлый вывод, и мне не нужно использовать MORE.

EDIT

Я буду делать один редактировать обрабатывать ваши пересмотренные требования. После этого вам предстоит изучить регулярные выражения и варианты, доступные JREN.BAT.

jren "(.*?c\d\d).*(newyork).*(\.xlsx)$" "$1 $2$3" 

Опять же, добавить /I возможность игнорировать случай.

+0

Я проверю вашу программу. У меня есть вкладка в ссылку, похоже, что вы сделали хорошую мастер-утилиту. Я новичок, но мне весело. – blazin8s

+0

@ blazin8s - Отредактировано в ответ на исправленное требование. – dbenham