Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Ошибка в переименовании группы файлов. (http://forum.oszone.net/showthread.php?t=298883)

shao 24-04-2015 03:15 2499989

Ошибка в переименовании группы файлов.
 
Здравствуйте коллеги!
Прошу помощи в такой ситуации, поскольку знаний мало и сам разобраться не смог...
В конкретном случае нужно в названии файлов поменять местами название и нумерацию.
Например с такого:

Код:

aaaaaaaaaaaa.S01E01.rus.LostFilm.TV.avi
aaaaaaaaaaaa.S01E02.rus.LostFilm.TV.avi

сделать так:

Код:

S01E01_aaaaaaaaaaaa.avi
S01E02_aaaaaaaaaaaa.avi

Но в результате получается так :

Код:

aaaaaa_S01E01_aaaaa.avi
S01E02_aaaaaaaaaaaa.avi
S01E03_aaaaaaaaaaaa.avi

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

Код:

@ECHO OFF

setlocal

for %%i in (*.avi) do call:ren "%%i"

goto:eof


:ren
set "old=%~n1"
set "pref=%old:~13,6%"
set "pref2=%old:~0,12%"

ren "%~1" "%pref%_%pref2%%~x1"


gora 24-04-2015 08:29 2500032

shao
- не "кладите" переименованные файлы в исходную папку
- или ужесточите маску поиска, дабы уже переименованные файлы не попадали вторично:
Код:

for %%i in (*TV.avi) do call:ren "%%i"

Iska 24-04-2015 12:11 2500118

Цитата:

Цитата gora
- или ужесточите маску поиска, дабы уже переименованные файлы не попадали вторично »

Я потому обычно сначала делаю «dir …», а результат вывода разбираю в «for /f»:
Код:

for /f … %%i in (`dir …`) do …

Georgio 24-04-2015 12:14 2500120

Код:

@echo off
setlocal

for /f "delims=" %%i in ('2^>nul dir/a-d/b "*.avi"') do call:ren "%%i"

endlocal
goto:eof


:ren

 set "old=%~n1"
 set "pref=%old:~13,6%"
 set "pref2=%old:~0,12%"

 ren "%~1" "%pref%_%pref2%%~x1"

 goto:eof


shao 24-04-2015 13:55 2500185

Цитата:

Цитата gora
- не "кладите" переименованные файлы в исходную папку »

Да , спасибо! Со вторым вариантом всё ОК!
Только не знаю, как с первым вариантом - как указать конечную папку для сохранения....
Или на директорию выше.

gora 24-04-2015 13:58 2500188

Цитата:

Цитата shao
как указать конечную папку для сохранения »

Используйте Copy вместо Ren

shao 24-04-2015 14:08 2500195

Georgio, Спасибо, и ваш вариант работает!
Могли бы поподробнее объяснить этот момент :
Код:

for /f "delims=" %%i in ('2^>nul dir/a-d/b "*.avi"')

Iska 24-04-2015 14:15 2500200

Цитата:

Цитата shao
Могли бы поподробнее объяснить этот момент : »

Получаем список («dir») файлов («/a:-d») в линейном формате («/b») по маске «"*.avi"», перенаправляя поток ошибок команды на пустое устройство («2>nul», дополнительно экранируя символ перенаправления «>» символом «^») на случай отсутствия файлов по указанной маске. Полученный вывод команды — перечень файлов — разбираем построчно по «for /f».

Georgio 24-04-2015 14:17 2500201

shao, да я об этом уже писал. Вот ссылка: "http://forum.script-coding.com/viewt...d=88702#p88702".


Время: 12:06.

Время: 12:06.
© OSzone.net 2001-