Войти

Показать полную графическую версию : [решено] Пакетное переименование


sasakot
18-11-2020, 12:03
Добрый день.

Не слишком силён в консоли.
Нужно переписывать имена файлов "NAME.XX.wav" в "NAME.YY.wav", где
XX - YY
SL - Ls
SR - Rs
SC - Cs
BL - Lsr
BR - Rsr

И вторая задача: "NAME xxxxx.wav" в "NAME.YY.wav", где
ххххххх - YY
Left Surround - Ls
Right Surround - Rs

Помогите, пожалуйста, решить проблему

YuS_2
18-11-2020, 13:33
Нужно переписывать имена файлов »
Видимо, NAME - произвольный набор символов? И ещё, "NAME " - с пробелом в конце, именно так, или вместо пробела, может быть что-то ещё?

sasakot
18-11-2020, 13:51
Видимо, NAME - произвольный набор символов? »
Всё верно.

И ещё, "NAME " - с пробелом в конце, именно так, или вместо пробела, может быть что-то ещё? »
Для второго случая - пробел.

YuS_2
18-11-2020, 13:55
Всё верно. »
Примерно так:
powershell

$fld = '.\TEST'
$arr = 'SL$','SR$','SC$','BL$','BR$',' Left Surround$',' Right Surround$'

dir $fld -filt '*.wav'|%{
$x = $_
foreach ($item in $arr){
if ($x.basename -match $item){
switch ($matches[0]){
'SL'{ren $x.fullname $(($x.basename -replace 'SL','Ls') + $x.extension)}
'SR'{ren $x.fullname $(($x.basename -replace 'SR','Rs') + $x.extension)}
'SC'{ren $x.fullname $(($x.basename -replace 'SC','Cs') + $x.extension)}
'BL'{ren $x.fullname $(($x.basename -replace 'BL','Lsr') + $x.extension)}
'BR'{ren $x.fullname $(($x.basename -replace 'BR','Rsr') + $x.extension)}
' Left Surround'{ren $x.fullname $(($x.basename -replace ' Left Surround','.Ls') + $x.extension)}
' Right Surround'{ren $x.fullname $(($x.basename -replace ' Right Surround','.Rs') + $x.extension)}
}
}
}
}

sasakot
18-11-2020, 14:36
Примерно так:
powershell »
Круто!

А можно CMD, чтобы не разрешать навсегда выполнение скриптов в PS?

YuS_2
18-11-2020, 14:42
чтобы не разрешать навсегда выполнение скриптов в PS? »
А в чем проблема, чтобы разрешить? Сейчас powershell уже заменил cmd в качестве стандартной командной оболочки...
Но если очень хочется, то сохранить скрипт в отдельном файле в кодировке UTF8, например, script.ps1 и запускать так:
@echo off
echo Выполняем...
powershell -ex bypass .\script.ps1
echo Готово.
pause

А если хочется совсем без скриптовых файлов, то можно и так:
<# ::
@echo off
>nul chcp 866
set "var=%~f0"
powershell -ex bypass -c "&{[scriptblock]::create((gc -lit $env:var -enc OEM) -join [char]10).invoke()}"
pause&exit /b
#>
$fld = '.\TEST'
$arr = 'SL$','SR$','SC$','BL$','BR$',' Left Surround$',' Right Surround$'

dir $fld -filt '*.wav'|%{
$x = $_
foreach ($item in $arr){
if ($x.basename -match $item){
switch ($matches[0]){
'SL'{ren $x.fullname $(($x.basename -replace 'SL','Ls') + $x.extension)}
'SR'{ren $x.fullname $(($x.basename -replace 'SR','Rs') + $x.extension)}
'SC'{ren $x.fullname $(($x.basename -replace 'SC','Cs') + $x.extension)}
'BL'{ren $x.fullname $(($x.basename -replace 'BL','Lsr') + $x.extension)}
'BR'{ren $x.fullname $(($x.basename -replace 'BR','Rsr') + $x.extension)}
' Left Surround'{ren $x.fullname $(($x.basename -replace ' Left Surround','.Ls') + $x.extension)}
' Right Surround'{ren $x.fullname $(($x.basename -replace ' Right Surround','.Rs') + $x.extension)}
}
}
}
}
- батник лучше сохранять в кодировке OEM (CP866).

sasakot
18-11-2020, 14:54
Спасибо.

megaloman
18-11-2020, 16:32
sasakot, CMD, сохранить в 1251 кодировке@Echo Off
>nul Chcp 1251
Set "BoxIn=Z:\Box_In\Мои медиа файлы"

Call :MyRen ".SL.wav" ".Ls.wav"
Call :MyRen ".SR.wav" ".Rs.wav"
Call :MyRen ".SC.wav" ".Cs.wav"
Call :MyRen ".BL.wav" ".Lsr.wav"
Call :MyRen ".BR.wav" ".Rsr.wav"
Call :MyRen " Left Surroun.wav" ".Ls.wav"
Call :MyRen " Right Surround.wav" ".Rs.wav"
Exit /B

:MyRen
For %%f In ("%BoxIn%\*%~1") Do (Set "N=%%~nxf" &Call Ren "%%f" "%%N:%~1=%~2%%")
Exit /B

sasakot
18-11-2020, 19:51
megaloman, Супер! То что надо! Спасибо!

Iska
18-11-2020, 20:29
".SL.wav" ".Ls.wav"
Что-то это мне напоминает :)…




© OSzone.net 2001-2012