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

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

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

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


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

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


Приветствую вас, гуру сообщество)
Прошу помощи в написании пакетного файла, если таковой возможно написать.

условия задачи следующие:
есть две сетевые папки "А" и "B"
в папку "A" кладут n-ое кол-во файлов с расширением .mp3 в папке "B" лежит n-ое кол-во файлов с расширением .mp4
задача:
по запуску пакетного файла смотреть на имена .mp3 файлов в папке "A" и переименовать файлы .mp4 в папке "B" в соответствии с именами в "A", не трогая при этом расширение.


Пример: положили в папку "А" - 3 файла с именами 1.mp3, 2.mp3, 3.mp3.
в папке "B" лежат файлы 10.mp4, 12.mp4, 16.mp4, 20.mp4, 25.mp4
Запускаем пакетный файл и получаем в папке "B" файлы с именами 1.mp4, 2.mp4, 3.mp4, 20.mp4, 25.mp4
Содержимое файлов mp4. абсолютно одинаковое, поэтому не важно в какой последовательности они будут переименованы.
В папку "A" могут положить больше файлов чем есть в папке "B", в таком случае переименование идет пока не закончатся файлы в папке "B".

Отправлено: 18:53, 12-03-2019

 

Ветеран


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

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


Цитата dedylka:
Запускаем пакетный файл и получаем в папке "B" файлы с именами 1.mp4, 2.mp4, 3.mp4, 20.mp4, 25.mp4
Содержимое файлов mp4. абсолютно одинаковое, поэтому не важно в какой последовательности они будут переименованы. »
И по какому принципу устанавливать соответствие между файлами в A и B?

Отправлено: 19:10, 12-03-2019 | #2



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

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


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


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

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


А что вы имеете ввиду под соответствием?

какой файл mp3 в "А" соответствует файлу mp4 в "B"? это не важно, как я написал, все файлы mp4 одинаковые. Главное, чтобы в "B" по итогу были файлы с такими же именами, как и в "A", кроме расширения.

Отправлено: 19:34, 12-03-2019 | #3


Ветеран


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

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


Тогда зачем их там делать несколько штук? Или больше, чем есть mp3-файлов? Пусть один и будет.

На WSH:
Скрытый текст
Код: Выделить весь код
Option Explicit

Dim strSourceFolder
Dim strDestFolder

Dim objFSO
Dim objFile
Dim objFile2
Dim boolFound


strSourceFolder = "C:\Мои проекты\0252\A"
strDestFolder   = "C:\Мои проекты\0252\B"

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

If objFSO.FolderExists(strSourceFolder) Then
	If objFSO.FolderExists(strSourceFolder) Then
		boolFound = False
		
		For Each objFile2 In objFSO.GetFolder(strDestFolder).Files
			If StrComp(objFSO.GetExtensionName(objFile2.Name), "mp4", 0) = 0 Then
				boolFound = True
				
				Exit For
			End If
		Next
		
		If boolFound Then
			boolFound = False
			
			For Each objFile In objFSO.GetFolder(strSourceFolder).Files
				If StrComp(objFSO.GetExtensionName(objFile.Name), "mp3", 0) = 0 Then
					boolFound = True
					objFile2.Copy objFSO.BuildPath(objFile2.ParentFolder, objFSO.GetBaseName(objFile.Name) & "." & objFSO.GetExtensionName(objFile2)), True
				End If
			Next
			
			If boolFound Then
				objFile2.Delete True
			End If
		Else
			WScript.Echo "Need at least one mp4 file in destination folder [" & strDestFolder & "]."
			WScript.Quit 3
		End If
	Else
		WScript.Echo "Can't find destination folder [" & strDestFolder & "]."
		WScript.Quit 2
	End If
Else
	WScript.Echo "Can't find source folder [" & strSourceFolder & "]."
	WScript.Quit 1
End If

Set objFSO = Nothing

WScript.Quit 0

Может, лучше опишете саму задачу?

Отправлено: 19:51, 12-03-2019 | #4


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


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

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


Цитата Iska:
Может, лучше опишете саму задачу? »

Есть система визуализации аудиофайлов. Играет некий плейлист из mp3 файлов, программа при запуске файла смотрит на его имя и сканирует другую папку на наличие файла mp4 с таким же именем, если находит картинка запускается на экран, не находит не запускается. Т.к. некоторая часть mp4 файлов одинаковая, задача облегчить жизнь людям, которые эти файлы переименовывают руками.

Цитата Iska:
На WSH »
Простите, я не настоящий сварщик( Чтобы запустить этот скрипт нужно дополнительное ПО?

Отправлено: 15:43, 13-03-2019 | #5


Ветеран


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

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


Цитата dedylka:
Чтобы запустить этот скрипт нужно дополнительное ПО? »
Нет. Сохранить в файл с расширением .vbs и запустить.

dedylka, вопрос по:
Цитата dedylka:
некоторая часть mp4 файлов одинаковая, »
А какая? Вообще, по уму, при одинаковости файлов, я бы даже не копии делал, а жёсткие ссылки на оригинал создавал, которые не занимают места на диске. Но тут уже, наверное, PowerShell будет потребен.

Отправлено: 17:15, 13-03-2019 | #6


Ветеран


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

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


Код: Выделить весь код
@echo off
set "dirA=A"
set "dirB=B"

setlocal enabledelayedexpansion
 for /f "delims=" %%a in ('dir /a-d/b "%dirA%\*"') do set /a "n+=1,nx=n+1,x=0"& set "c!n!=%%~na"
 for /f "delims=" %%a in ('dir /a-d/b "%dirB%\*"') do set /a m+=1& set "l!m!=%%a"& call :# "%%l!m!%%" "%%c!m!%%" "%dirA%" "%dirB%"
endlocal
pause& exit
 
:#
 if not "%~2"=="" (set "z=%~2") else (set /a x+=1& if not !x!==%nx% (call set "z=%%c!x!%%") else (set /a x=0& goto #))
 pushd "%~4"
  if not exist "%z%%~x1" ren "%~1" "%z%%~x1"
 popd
exit /b
если стр.14 изменить так
Код: Выделить весь код
if not exist "%~n1_%z%%~x1" ren "%~1" "%~n1_%z%%~x1"
код будет переименовывать файлы в "B" именами файлов из "A" по кругу вот так
Файл 156828

Последний раз редактировалось alpap, 26-05-2020 в 16:12.


Отправлено: 20:58, 13-03-2019 | #7


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


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

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


Изображения
Тип файла: png before.PNG
(34.5 Kb, 3 просмотров)
Тип файла: png after.PNG
(41.1 Kb, 3 просмотров)

Цитата Iska:
А какая? »
совсем небольшая, буквально капля в море, но требующая внимания, поэтому хочется этот процесс автоматизировать.


Цитата Iska:
Нет. Сохранить в файл с расширением .vbs и запустить. »
спасибо большое, я протестировал скрипт, но он у меня отрабатывает немного некорректно(
он переименовывает первый файл, а дальше видимо копирует его столько раз сколько файлов в папке A и называет нужными именами, при этом остальные файлы в папке B, которые не были переименованы просто оставляет.
Таким образом папка B очень скоро будет завалена файлами(

Отправлено: 12:49, 14-03-2019 | #8


Аватара для R.i.m.s.k.y.

Ветеран


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

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


помогите, пожалуйста, с батником для переименования

Суть: нужно перекодировать dts в ас3
из dts вытаскиваем wav программой eac3to, она выдает файлы вида
2eng.C.wav
2eng.L.wav
2eng.LFE.wav
2eng.R.wav
2eng.SL.wav
2eng.SR.wav

а программа кодировщик хочет
2eng C.wav
2eng L.wav
2eng LFE.wav
2eng R.wav
2eng Ls.wav
2eng Rs.wav

т.е. после 2eng вместо точки поставить пробел и два файла переименовать:
2eng.SL.wav -> 2eng Ls.wav
2eng.SR.wav -> 2eng Rs.wav

имена вавок 2eng могут быть произвольными (с точками и пробелами), но концовка всегда .C .L .R .SL .SR

F1!

-------
Хороший установщик тот, которого не замечаешь
Оформление в инно пустая трата времени: толку мало, головняка много, а ошибок истчо больше!


Отправлено: 15:14, 14-03-2019 | #9


Ветеран


Contributor


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

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


dedylka, Попробуйте. Пути пропишИте свои без \ на конце
Код: Выделить весь код
@Echo Off
	Set "FMP3=Z:\Box_In"
	Set "EMP3=mp3"

	Set "FMP4=Z:\Soft_In"
	Set "EMP4=mp4"

	Set /A N=1000000
	FOR %%f IN ("%FMP4%\*.%EMP4%") DO Ren "%%f" "~%%~nxf"
	FOR %%f IN ("%FMP4%\*.%EMP4%") DO Set /A N+=1 &Call Ren "%%f" "MP4@%%N%%.%EMP4%"

	Set /A N=1000000
	FOR %%f IN ("%FMP3%\*.%EMP3%") DO Set /A N+=1 &>nul 2>&1 Call Ren "%FMP4%\MP4@%%N%%.%EMP4%" "%%~nf.%EMP4%"
GoTo :Eof

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

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

Отправлено: 15:21, 14-03-2019 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Помощь с написанием Bat. Перемещение и удаление файлов и папок старше N дней. Stanley5 Скриптовые языки администрирования Windows 20 06-03-2019 05:39
CMD/BAT - [решено] Переименование с условием bat alado Скриптовые языки администрирования Windows 8 14-07-2017 19:27
CMD/BAT - Архивирование, переименование и перемещение файлов с помощью BAT-файла kirillius Скриптовые языки администрирования Windows 7 13-05-2016 12:57
CMD/BAT - Переименование файлов в папке по имени папки_счётчик Sergo_zloy Скриптовые языки администрирования Windows 13 17-01-2014 16:58
CMD/BAT - Переименование группы файлов, используя команды bat SergMarkow Скриптовые языки администрирования Windows 0 20-01-2013 23:23




 
Переход