Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Пакетное переименование файлов

Ответить
Настройки темы
CMD/BAT - [решено] Пакетное переименование файлов

Аватара для ArsenBespalov

Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Здравствуйте! Возможно такой вопрос уже задавался, но я не нашел, прошу прощения, если повторюсь.

У меня затык произошел, ситуация следующая:
  • Есть исходные файлы по формату Filename_XXX, где XXX - это порядковый номер.
  • Есть текстовый файл в котором списком написаны конечные имена фалов, т.е. файл Filename_023 соответствует HelloMyWorld, а, допустим, Filename_010 соответвует ThisIsMyName.
  • Требуется переименовать (вернее копировать) файлы Filename_XXX в уникальное имя, которое указано в текстовом файле, т.е. допустим Filename_001 берет свое имя из того самого файла в первой строке, а Filename_383 будет соответствовать 383 строка текстового файла.

Вот собственно для того чтобы переименовывать, вернее копировать я использую:
Код: Выделить весь код
...
set prefix=Filename
set id=1
set DB=%1
...
for /f "eol=;" %%i to (%DB%) do (
copy /y %prefix%_%id% to_dir\%%i
set /a id=id+1
)
где %id% - это порядковый номер, %prefix% - собственно префиск исходных файлов, а %DB% - тот самый файлик, в котором прописаны уникальные имена файлов.

Проблемы на лицо, во-первых у меня не выполняется операция сложения в строке set /a id=id+1, во-вторых я не понимаю как вообще сделать занчение трехзначным, т.е. не Filename_1, а Filename_001, в-третьих я вообще отказался в итоге от данной реализации и начил отталкиваться от того, чтобы временно создавать текстовый файл со списком нужных нам исходных файлов:
Код: Выделить весь код
dir /b "%prefix%*" > tmp.txt
Но я просто дальше не понимаю, что с этим делать. Ну, получил я список нужных мне файлов, а как этим списком воспользоваться в цикле FOR?

Отправлено: 14:44, 02-09-2010

 

Старожил


Сообщения: 425
Благодарности: 108

Профиль | Отправить PM | Цитировать


1. Изменять переменные в цикле нужно используя "!" а не "%" - иначе у Вас значение так и не поменяется (внутри цикла). При этом в начале скрипта должна быть объявлена строка SetLocal EnableDelayedExpansion

2. очепятка в цикле - вместо "to" надо "in"

3. добавте в цикл еще одну переменню (так менее красиво, но чуточку быстрее):
set n=00!id!
set n=!n:~-3!

и в команде copy вместо %id% используйте !n!
* неизменяемые переменные можно оставить в процентах

-------
Как сказало Дерево Дровосеку: "я - пень".

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:28, 02-09-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для gora

Ушёл из жизни


Сообщения: 6040
Благодарности: 3487

Профиль | Отправить PM | Цитировать


Цитата NiOl:
так менее красиво, но чуточку быстрее »
Про быстрее я не понял, а про красиво...
Код: Выделить весь код
set id=1000
...
copy /y %prefix%_!id:~-3! to_dir\%%i
...
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:00, 02-09-2010 | #3


Аватара для ArsenBespalov

Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


NiOl, gora, очень хорошо получилось с 001, но вот в процессе работы цикла на 1 все это дело не увеличивается, т.е. при копировании получилось то, что один Filename_001 размножился на все файлы.

Отправлено: 05:26, 03-09-2010 | #4


Аватара для gora

Ушёл из жизни


Сообщения: 6040
Благодарности: 3487

Профиль | Отправить PM | Цитировать


ArsenBespalov, да вроде все работает
Код: Выделить весь код
SetLocal EnableDelayedExpansion
set prefix=Filename
set id=1000
set DB=nameslist.txt

for /f "eol=;" %%i in (%DB%) do (
copy /y in_dir\%prefix%_!id:~-3! to_dir\%%i
set /a id=id+1
)
читать дальше »
файл nameslist.txt
Код: Выделить весь код
HelloMyWorld
ThisIsMyName
Hel
MyWorld
World
Hello
This
HelloMy
My
HelloWorld
1HelloMyWorld
2HelloMyWorld
3HelloMyWorld
4HelloMyWorld
5HelloMyWorld
1ThisIsMyName
2ThisIsMyName
3ThisIsMyName
4ThisIsMyName
5ThisIsMyName
6ThisIsMyName
содержимое исходной папки
Код: Выделить весь код
 Содержимое папки C:\Temp\in_dir

03.09.2010  08:37    <DIR>          .
03.09.2010  08:37    <DIR>          ..
03.09.2010  08:19               189 Filename_000
03.09.2010  08:19               189 Filename_001
01.09.2010  12:39               234 Filename_002
01.09.2010  10:36             1 514 Filename_003
01.09.2010  10:23                 0 Filename_004
31.08.2010  10:44             1 490 Filename_005
31.08.2010  10:44             2 502 Filename_006
31.08.2010  10:44             2 543 Filename_007
31.08.2010  10:44             2 521 Filename_008
31.08.2010  10:44             2 250 Filename_009
31.08.2010  10:44             2 504 Filename_010
31.08.2010  10:44             2 504 Filename_011
31.08.2010  10:44             2 476 Filename_012
31.08.2010  10:44             2 361 Filename_013
31.08.2010  10:44             2 423 Filename_014
31.08.2010  10:44               357 Filename_015
31.08.2010  10:17            21 070 Filename_016
31.08.2010  08:34            47 935 Filename_017
31.08.2010  08:33         2 359 350 Filename_018
30.08.2010  11:10             7 020 Filename_019
30.08.2010  11:10             7 020 Filename_020
              21 файлов      2 468 452 байт
содержимое папки приемника
Код: Выделить весь код
 Содержимое папки C:\Temp\to_dir

03.09.2010  08:41    <DIR>          .
03.09.2010  08:41    <DIR>          ..
31.08.2010  10:44             2 504 1HelloMyWorld
31.08.2010  10:44               357 1ThisIsMyName
31.08.2010  10:44             2 504 2HelloMyWorld
31.08.2010  10:17            21 070 2ThisIsMyName
31.08.2010  10:44             2 476 3HelloMyWorld
31.08.2010  08:34            47 935 3ThisIsMyName
31.08.2010  10:44             2 361 4HelloMyWorld
31.08.2010  08:33         2 359 350 4ThisIsMyName
31.08.2010  10:44             2 423 5HelloMyWorld
30.08.2010  11:10             7 020 5ThisIsMyName
30.08.2010  11:10             7 020 6ThisIsMyName
01.09.2010  12:39               234 Hel
31.08.2010  10:44             1 490 Hello
31.08.2010  10:44             2 543 HelloMy
03.09.2010  08:19               189 HelloMyWorld
31.08.2010  10:44             2 250 HelloWorld
31.08.2010  10:44             2 521 My
01.09.2010  10:36             1 514 MyWorld
31.08.2010  10:44             2 502 This
03.09.2010  08:19               189 ThisIsMyName
01.09.2010  10:23                 0 World
              21 файлов      2 468 452 байт
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:16, 03-09-2010 | #5


Аватара для ArsenBespalov

Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


gora, окознал свою ошибку, спасибо за совет! Вернее даже за решение!

Отправлено: 12:57, 03-09-2010 | #6


Новый участник


Сообщения: 1
Благодарности: 0

Профиль | Отправить PM | Цитировать


Тема хоть и старая но пришлась как нельзя к стати.
Только стоит дабавить расширения файлов в строку

copy /y in_dir\%prefix%_!id:~-3!.txt to_dir\%%i.txt

Отправлено: 14:50, 14-04-2016 | #7


Аватара для Lenich

Новый участник


Сообщения: 42
Благодарности: 1

Профиль | Отправить PM | Цитировать


Ребята, объясните человечьим языком значение вот этого:

Цитата:
!n:~-3!

Отправлено: 23:52, 08-08-2016 | #8


Ветеран


Contributor


Сообщения: 25078
Благодарности: 7288

Профиль | Отправить PM | Цитировать


Человечьим языком объяснено здесь:
Код: Выделить весь код
set /?
Извлечёт последние три символа переменной окружения «n».
Это сообщение посчитали полезным следующие участники:

Отправлено: 02:18, 09-08-2016 | #9


Аватара для Lenich

Новый участник


Сообщения: 42
Благодарности: 1

Профиль | Отправить PM | Цитировать


Iska, спасибо человек!

Отправлено: 03:56, 11-08-2016 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Пакетное переименование файлов

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Пакетное переименование ярлыков SimSim Хочу все знать 9 24-10-2012 10:44
CMD/BAT - [решено] Пакетное переименование с использованием алфавитного счётчика kotik147 Скриптовые языки администрирования Windows 6 13-05-2010 00:03
Разное - [решено] Переименование файлов mitrik Microsoft Windows 2000/XP 3 22-08-2008 04:53
переименование файлов mask Программирование и базы данных 6 20-05-2003 00:53
Переименование файлов Pavelz Microsoft Windows NT/2000/2003 7 24-01-2003 10:32




 
Переход