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

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

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

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


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

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


Прошу помочь!
Есть директория, в ней около ста папок с именами, в которых присутствуют либо "EUR", либо - "MULTIX" (где X - цифры от 1 до 9), либо - "USA".
Внутри папок файлы с расширением "cso".
Теперь сама просьба:
- необходимо переименовать эти файлы с расширением "cso" согласно имени папки, которое необходимо обрезать до символов "EUR" (или "MULTIX" или "USA") включительно. Одновременно убрав из имени файла знаки подчеркивания.

Например, имеем:
Директорию "2007" с папкой "Burnout_Dominator_EUR_PSP-pSyPSP" и файлом "psy-boe.cso". Хотим получить имя файла хотя бы такого вида:

Burnout Dominator EUR.cso
Если возможно, то еще пару пожеланий:
1) Название региона взять в скобки - Burnout Dominator (EUR).cso
2) В каждой папке создать файл - "original_name.txt", в который поместить оригинальное имя дампа - "psy-boe.cso".

Прим. Пересобираю коллекцию. Папок очеееень много.
Заранее благодарен.

Отправлено: 08:07, 25-08-2012

 

Ветеран


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

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


Aleksander.Ruban@fb,
Попробуй:
Код: Выделить весь код
@echo off
setlocal

pushd "C:\2007" || goto:eof

for %%i in (EUR MULTI USA) do (

    for /f "tokens=*" %%j in ('dir /b /ad *%%i*') do call:1 %%i "%%j"

)

popd
goto:eof

:1

set "name=%~2"
set "name=%name:EUR=?%"
set "name=%name:MULTI=?%"
set "name=%name:USA=?%"

for /f "tokens=1 delims=?" %%i in ("%name%") do set "name=%%i(%1)"

ren "%~2\psy-boe.cso" "%name:_= %.sco"
Если название файла sco заранее не известно, то можно заменить последнюю строчку на:
Код: Выделить весь код
for %%i in ("%~2\*.sco") do (

    ren "%%i" "%name:_= %.sco"
    1>"%~2\orig_name.txt" echo %%~nxi

)

Последний раз редактировалось Foreigner, 25-08-2012 в 09:57.

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

Отправлено: 09:39, 25-08-2012 | #2



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

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


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


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

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


Цитата Foreigner:
@echo off
setlocal
pushd "C:\2007" || goto:eof
for %%i in (EUR MULTI USA) do (
for /f "tokens=*" %%j in ('dir /b /ad *%%i*') do call:1 %%i "%%j"
)
popd
goto:eof
:1
set "name=%~2"
set "name=%name:EUR=?%"
set "name=%name:MULTI=?%"
set "name=%name:USA=?%"
for /f "tokens=1 delims=?" %%i in ("%name%") do set "name=%%i(%1)"
ren "%~2\psy-boe.cso" "%name:_= %.sco"
»
Отлично! Только в последней строке (ren "%~2\psy-boe.cso" "%name:_= %.sco") надо сменить %.sco на %.cso.
Но не понял, как заставить работать скрипт, если имя файла неизвестно.

В таком варианте:
Цитата Foreigner:
@echo off
setlocal
pushd "C:\2007" || goto:eof
for %%i in (EUR MULTI USA) do (
for /f "tokens=*" %%j in ('dir /b /ad *%%i*') do call:1 %%i "%%j"
)
popd
goto:eof
:1
set "name=%~2"
set "name=%name:EUR=?%"
set "name=%name:MULTI=?%"
set "name=%name:USA=?%"
for /f "tokens=1 delims=?" %%i in ("%name%") do set "name=%%i(%1)"
for %%i in ("%~2\*.sco") do (
ren "%%i" "%name:_= %.sco"
1>"%~2\orig_name.txt" echo %%~nxi
)
»
После запуска перименование не происходит.
Еще вопрос в первом варианте скобка ")" в конце нужна?
Прим. Сейчас узрел ошибки cso-sco. Подправлю отпишусь.

Последний раз редактировалось Aleksander.Ruban@fb, 25-08-2012 в 12:03. Причина: Уточнение


Отправлено: 12:01, 25-08-2012 | #3


Ветеран


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

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


Цитата Aleksander.Ruban@fb:
После запуска перименование не происходит.
Еще вопрос в первом варианте скобка ")" в конце нужна? »
Может тоже cso. Скобка нужна
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:05, 25-08-2012 | #4


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


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

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


В таком варианте работает.
Цитата:
@echo off
setlocal
pushd "C:\2007" || goto:eof
for %%i in (EUR MULTI USA) do (
for /f "tokens=*" %%j in ('dir /b /ad *%%i*') do call:1 %%i "%%j"
)
popd
goto:eof
:1
set "name=%~2"
set "name=%name:EUR=?%"
set "name=%name:MULTI=?%"
set "name=%name:USA=?%"
for /f "tokens=1 delims=?" %%i in ("%name%") do set "name=%%i(%1)"
for %%i in ("%~2\*.cso") do (
ren "%%i" "%name:_= %.cso"
1>"%~2\orig_name.txt" echo %%~nxi
)
Но один из файлов в orig_name.txt переносится не в оригинальном виде, а в виде имени уже переименованого файла.
Например, вместо "su-frantix.cso" в orig_name.txt записалось "Frantix.(EUR).cso". Кстати, сам файл переименован в "Frantix.(MULTI).cso". Точка перед (MULTI) и (EUR) лишняя, да и почему нессотвествие (MULTI) и (EUR)? В остальных случаях в orig_name.txt записались исходные (правильные, не переименованные) имена. Проверил несколько раз - всегда один из файлов неверно записывается в orig_name.txt. Проблема в том, что непонятно в какой именно... Переименование происходит не по алфавиту.
И еще скрипт в конце (перед закрытием) заканчивается выводом сообщения "file not found"

Отправлено: 12:23, 25-08-2012 | #5


Ветеран


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

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


Я не смог повторить, у меня все нормально. Сделайте листинг тестовой директории:
Код: Выделить весь код
dir /b /s c:\2007\*.cso > file.txt
И выложите. Может какие-нибудь проблемы в названиях?
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:06, 25-08-2012 | #6


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


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

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


Удалено. Дубль сваял.

Последний раз редактировалось Aleksander.Ruban@fb, 25-08-2012 в 13:44. Причина: Уточнение


Отправлено: 13:27, 25-08-2012 | #7


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


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

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


Листинг
До переименования
читать дальше »

c:\2007\Aces_of_War_EUR_PSP-CONFLiCT\cft-aofw.cso
c:\2007\Activision_Hits_Remixed_EUR_PSP-DARKFORCE\dfc-ahre.cso
c:\2007\Archer_Macleans_Mercury_PSP_MULTI5-ELK\CoW-mercury.cso
c:\2007\Bomberman.EUR.PSP-PGS\pgs-bom.cso
c:\2007\Brunswick_Pro_Bowling_EUR_PSP-OE\oe-bruns.cso
c:\2007\Championship_Manager_EUR_PSP-pSyPSP\psy-cm.cso
c:\2007\Coded_Arms_PAL_PSP_MULTI5-WAR3X\wrx-codar.cso
c:\2007\Frantix.EUR.MULTI5.PSP-SUSHi\su-frantix.cso
c:\2007\Namco_Museum_Battle_Collection_Pal_PSP-eLk\c-nmpsp.cso


и после
читать дальше »

c:\2007\Aces_of_War_EUR_PSP-CONFLiCT\Aces of War (EUR).cso
c:\2007\Activision_Hits_Remixed_EUR_PSP-DARKFORCE\Activision Hits Remixed (EUR).cso
c:\2007\Archer_Macleans_Mercury_PSP_MULTI5-ELK\Archer Macleans Mercury PSP (MULTI).cso
c:\2007\Bomberman.EUR.PSP-PGS\Bomberman.(EUR).cso
c:\2007\Brunswick_Pro_Bowling_EUR_PSP-OE\Brunswick Pro Bowling (EUR).cso
c:\2007\Championship_Manager_EUR_PSP-pSyPSP\Championship Manager (EUR).cso
c:\2007\Coded_Arms_PAL_PSP_MULTI5-WAR3X\Coded Arms PAL PSP (MULTI).cso
c:\2007\Frantix.EUR.MULTI5.PSP-SUSHi\Frantix.(MULTI).cso
c:\2007\Namco_Museum_Battle_Collection_Pal_PSP-eLk\c-nmpsp.cso

Не переименовался файл в дир-ии Namco_Museum_Battle_Collection_Pal_PSP-eLk - Pal записан нестандартно (можно добавить).
В имени Bomberman.(EUR).cso перед (EUR) затесалась точка.
В папке "c:\2007\Frantix.EUR.MULTI5.PSP-SUSHi\Frantix.(MULTI).cso" в файл "orig_name.txt" вместо "su-frantix.cso" записалось "Frantix.(EUR).cso". Это тестовый набор папок. Я пробовал еще на одном - тоже в один из файлов "orig_name.txt" вместо первоначального имени записалось переименованное.

Вариант 2
читать дальше »

c:\2007\AFL_Challenge_EUR_PROPER_PSP-BAHAMUT\b-aflchal.cso
c:\2007\Blood_Bowl_EUR_PSP-ZER0\zer0-bbowl.cso
c:\2007\Cars_Race_o_Rama_EUR_PSP-BAHAMUT\b-carsrorepsp.cso
c:\2007\Cover_Girl_EUR_PSP-iCON\icon-cg-psp.cso
c:\2007\Crystal_Defenders_EUR_PSN_PSP-pSyPSP\psy-cdef.cso
c:\2007\Elementalmonster_TD_Portable_EUR_MULTi5_PSN_PSP-NRP\nrp-emtdpe.cso
c:\2007\Football_Manager_Handheld_2010_EUR_PSP-pSyPSP\psy-fm10.cso
c:\2007\Harry_Potter_and_the_Half-Blood_Prince_EUR_PROPER_PSP-iND\ind-hphpp.cso
c:\2007\Holy_Invasion_of_Privacy_Badman_EUR_PSP-ZER0\zer0-hiopb.cso
c:\2007\King_of_Pool_EUR_PSN_PSP-iND\ind-kop.cso


и после -
читать дальше »

c:\2007\AFL_Challenge_EUR_PROPER_PSP-BAHAMUT\AFL Challenge (EUR).cso
c:\2007\Blood_Bowl_EUR_PSP-ZER0\Blood Bowl (EUR).cso
c:\2007\Cars_Race_o_Rama_EUR_PSP-BAHAMUT\Cars Race o Rama (EUR).cso
c:\2007\Cover_Girl_EUR_PSP-iCON\Cover Girl (EUR).cso
c:\2007\Crystal_Defenders_EUR_PSN_PSP-pSyPSP\Crystal Defenders (EUR).cso
c:\2007\Elementalmonster_TD_Portable_EUR_MULTi5_PSN_PSP-NRP\Elementalmonster TD Portable (MULTI).cso
c:\2007\Football_Manager_Handheld_2010_EUR_PSP-pSyPSP\Football Manager Handheld 2010 (EUR).cso
c:\2007\Harry_Potter_and_the_Half-Blood_Prince_EUR_PROPER_PSP-iND\Harry Potter and the Half-Blood Prince (EUR).cso
c:\2007\Holy_Invasion_of_Privacy_Badman_EUR_PSP-ZER0\Holy Invasion of Privacy Badman (EUR).cso
c:\2007\King_of_Pool_EUR_PSN_PSP-iND\King of Pool (EUR).cso


В папках "Cars_Race_o_Rama_EUR_PSP-BAHAMUT" и "Elementalmonster_TD_Portable_EUR_MULTi5_PSN_PSP-NRP" в файлах "orig_name.txt" вместо "b-carsrorepsp.cso" и "nrp-emtdpe.cso" записалось соотвественно "Cars Race o Rama (EUR).cso" и "Elementalmonster TD Portable (EUR).cso".
Может не успевает скрипт, задержка нужна?

Отправлено: 13:52, 25-08-2012 | #8


Ветеран


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

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


Aleksander.Ruban@fb,
Разобрался. Директории, в названиях которых есть и EUR и MULTI и USA одновременно, обрабатываются несколько раз, из-за этого файлы переименовываются тоже несколько раз. Измени последний for
Код: Выделить весь код
for %%i in ("%~2\*.cso") do (

    if not exist "%~2\orig_name.txt" (
    
    ren "%%i" "%name:_= %.cso"
    1>"%~2\orig_name.txt" echo %%~nxi

))
ЗЫ. Соответственно c:\2007\Namco_Museum_Battle_Collection_Pal_PSP-eLk\c-nmpsp.cso вообще не обрабатывается, т.к. не соответствует условиям поиска (USA MULTI EUR)
ЗЫЫ. "file not found" если есть директория, в названии которой отсутствуют EUR, MULTI или USA.

Последний раз редактировалось Foreigner, 25-08-2012 в 14:20.

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

Отправлено: 14:14, 25-08-2012 | #9


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


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

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


Спасибо. Вы гений! Все сработало прекрасно: 1050 каталогов (460 гигов) переименовались в течении 1 минуты.

Отправлено: 20:11, 25-08-2012 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Как сделать сложное условие в операторе if madmax24 Скриптовые языки администрирования Windows 17 12-02-2015 15:43
DNS/DHCP - Помогите !!! Сложное построение сети в том числе под управлением Win 7 lamajor90x Сетевые технологии 2 24-11-2011 20:25
Пакетное преобразование файлов PCLAlex AutoIt 1 21-06-2011 10:09
PowerShell - Сложное преобразование xls или csv файла в текстовый tarasov.evgeny Скриптовые языки администрирования Windows 1 29-05-2011 15:04
2003/XP/2000 - Excel | Сложное условие (одно или несколько) или макрос ZeLiK Microsoft Office (Word, Excel, Outlook и т.д.) 1 17-02-2011 12:07




 
Переход