|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Переименовать файлы одного типа также как файлы другого типа |
|
|
CMD/BAT - [решено] Переименовать файлы одного типа также как файлы другого типа
|
Новый участник Сообщения: 4 |
Профиль | Отправить PM | Цитировать For n от 1 и до конца каталога берем n-й файл ass и переименовываем так же как n-й файл mkv
Но вот как это сделать в батнике так и не придумал. |
|
Отправлено: 12:13, 04-09-2021 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать но в зависимости от имени ass, т.е. сортировки, не будет четкого соответствия одного файла другому в отношении просто очередности, по сути это рандом, при смене имени в другой раз это будет уже не тот файл по списку.
тут нужен или дополнительный файл или переменные для алгоритма переименования или таблица с соответствием по какому-то критерию что по сути то же, тогда это будет правильно. |
Отправлено: 13:30, 04-09-2021 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 4
|
Профиль | Отправить PM | Цитировать Сколь раз делал что-то подобное всегда все нормально было. Происходит сортировка по имени, как она может быть разная?
|
Отправлено: 13:50, 04-09-2021 | #3 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать дело ваше:
@echo off set "sdir=C:\d" set "ext1=ass" set "ext2=mkv" cd /d "%sdir%" for /f "tokens=1* delims=[]" %%a in ('dir /a-d/b "*.%ext1%"^|find /n /v ""') do call :#_ren "%%a" "%%b" pause& exit :#_ren for /f "tokens=1* delims=[]" %%a in ('dir /a-d/b "*.%ext2%"^|find /n /v ""^|find "%~1"') do 2>nul ren "%%b" "%~n2%%~xb" exit /b |
Отправлено: 13:53, 04-09-2021 | #4 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать На WSH:
Скрытый текст
Option Explicit Dim objFSO Dim objFile Dim objDictMKV Dim objDictASS Dim arrMKV Dim arrASS Dim iMaxCount Dim i Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") Set objDictMKV = WScript.CreateObject("Scripting.Dictionary") Set objDictASS = WScript.CreateObject("Scripting.Dictionary") For Each objFile In objFSO.GetFolder(WScript.CreateObject("WScript.Shell").CurrentDirectory).Files Select Case objFSO.GetExtensionName(objFile.Name) Case "mkv" objDictMKV.Add objFile.Name, "" Case "ass" objDictASS.Add objFile.Name, "" Case Else ' Nothing to do End Select Next If objDictMKV.Count > 0 And objDictASS.Count > 0 Then arrMKV = objDictMKV.Keys arrASS = objDictASS.Keys If objDictMKV.Count <= objDictASS.Count Then iMaxCount = objDictMKV.Count Else iMaxCount = objDictASS.Count End If For i = LBound(arrMKV) To iMaxCount - 1 WScript.Echo "Rename file [" & arrASS(i) & "] into [" & objFSO.GetBaseName(arrMKV(i)) & "." & objFSO.GetExtensionName(arrASS(i)) & "]." objFSO.MoveFile arrASS(i), objFSO.GetBaseName(arrMKV(i)) & "." & objFSO.GetExtensionName(arrASS(i)) Next Else WScript.Echo "Nothing found for renaming." WScript.Quit 1 End If Set objDictASS = Nothing Set objDictMKV = Nothing WScript.Quit 0 |
|
Отправлено: 14:38, 04-09-2021 | #5 |
Ветеран Сообщения: 2723
|
Профиль | Отправить PM | Цитировать Еще вариант
@Echo Off cls Set "File1=Z:\Box_In\*.ass" Set "File2=Z:\Box_In\*.mkv" Call :Mass "%File1%" "@ass" "N1" Call :Mass "%File2%" "@mkv" "N2" If Not "%N1%"=="%N2%" (Echo ??? Error!!! N1=%N1%^<^>%N2%=N2 &Pause &Exit /B 2) For /L %%i In (1,1,%N1%) Do Call :MyRen "%%@ass%%i%%" "%%@mkv%%i%%" pause Exit /B 0 :Mass Set /A @N=0 For /F "usebackq delims=" %%f In (`2^>nul Dir %1 /B /A:-D /O:N`) Do Set /A @N+=1 &Call Set "%~2%%@N%%=%~dp1%%f" Set /A %~3=%@N% Exit /B :MyRen Ren %1 "%~n2%~x1" Exit /B |
------- Отправлено: 15:51, 04-09-2021 | #6 |
Новый участник Сообщения: 4
|
Профиль | Отправить PM | Цитировать Предложенный alpap вариант не работает, если в именах есть квадратные скобки и собственно переименование по-моему не в ту сторону. Но на основе его варианта сделал свой велосипед.
@echo off SETLOCAL EnableDelayedExpansion set /a i = 0 for %%a in (*.ass) do ( set /a i += 1 call :#_ren !i! "%%a" ) :#_ren set /a j = 0 for %%b in (*.mkv) do ( set /a j += 1 if !j! equ %1 ( ren %2 "%%~nb%~x2" exit /b ) ) Потестил вариант megaloman - вроде ОК. Как тут хитро с массивами сделано... |
Последний раз редактировалось sdml, 04-09-2021 в 16:49. Причина: upd Отправлено: 16:03, 04-09-2021 | #7 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать Цитата sdml:
|
|
Отправлено: 19:33, 04-09-2021 | #8 |
Ветеран Сообщения: 2723
|
Профиль | Отправить PM | Цитировать Цитата alpap:
Цитата кто-то из древних корифеев, не помню кто:
Имхо, надо понимать, где шагаешь, чтобы не втоптаться. Постановка ... |
||
------- Отправлено: 23:39, 04-09-2021 | #9 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать megaloman, отчасти потому я по-прежнему предпочитаю WSH: на порядок меньше шансов, что что-то где-то когда-то «рванёт» из-за того, что на пакетных файлах вообще нет строк, а PowerShell пользует С-шную логику для строк.
|
Отправлено: 00:18, 05-09-2021 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Как удалить все файлы одного типа во всех подпапках определенной папки? | popt2t | Скриптовые языки администрирования Windows | 3 | 16-02-2013 21:03 | |
CMD/BAT - [решено] Как удалить файлы одного типа через командную строку? | Raf-9600 | Скриптовые языки администрирования Windows | 5 | 01-08-2011 11:02 | |
Разное - [решено] Как открыть файлы типа *.bkf в Windows 7? | Nerde | Microsoft Windows 7 | 10 | 08-07-2010 23:10 | |
Как в домене вин 2003 запретить пользователям сохранять файлы определенного типа | Russo | Microsoft Windows NT/2000/2003 | 5 | 12-02-2009 10:25 | |
как изменить права на файлы только определенного типа | Guest | Microsoft Windows NT/2000/2003 | 12 | 23-03-2004 10:09 |
|