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

Аватара пользователя
dedylka

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

Сообщение dedylka »

Приветствую вас, гуру сообщество)

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



условия задачи следующие:

есть две сетевые папки "А" и "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".
Аватара пользователя
Iska

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

Сообщение Iska »

Цитата dedylka:



Запускаем пакетный файл и получаем в папке "B" файлы с именами 1.mp4, 2.mp4, 3.mp4, 20.mp4, 25.mp4

Содержимое файлов mp4. абсолютно одинаковое, поэтому не важно в какой последовательности они будут переименованы.
CMD/BAT - [решено] Помощь с написанием Bat. Переименование файлов в папке с условием.




И по какому принципу устанавливать соответствие между файлами в A и B?
Аватара пользователя
megaloman

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

Сообщение megaloman »

R.i.m.s.k.y.,

Код:

Код: Выделить всё

@Echo Off
	Set "In=Z:\Soft_In"
	Set  InE=".C.wav" ".L.wav" ".R.wav" ".SL.wav" ".SR.wav"
	Set OutE=" C.wav" " L.wav" " R.wav" " Ls.wav" " Rs.wav"
	Set /A N=1000
	FOR %%f IN (%InE%) DO Set /A N+=1 &Call Set "In@%%N%%=%%~f"
	Set /A NN=%N%
	Set /A N=1000
	FOR %%f IN (%OutE%) DO Set /A N+=1 &Call Set "Out@%%N%%=%%~f"
	For /L %%i In (1001,1,%NN%) DO Call :MyRen "%In%" "%%In@%%i%%"  "%%Out@%%i%%"
GoTo :Eof
:MyRen
	FOR %%f IN ("%~1\*%~2") DO (
		Set "Rep=%%~nxf~~"
		 >nul Call Move /Y "%%f" "%~1\%%Rep:%~2~~=%~3%%"
	)
GoTo :Eof

Нарисуйте свой путь вместо моего Set "In=Z:\Soft_In"
Аватара пользователя
dedylka

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

Сообщение dedylka »

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



На WSH:



Скрытый текст

[spoiler]Код:
[/spoiler]

Код: Выделить всё

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







Может, лучше опишете саму задачу?
Аватара пользователя
dedylka

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

Сообщение dedylka »

Цитата Iska:



Может, лучше опишете саму задачу?
CMD/BAT - [решено] Помощь с написанием Bat. Переименование файлов в папке с условием.






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




Цитата Iska:



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




Простите, я не настоящий сварщик( Чтобы запустить этот скрипт нужно дополнительное ПО?
Аватара пользователя
dedylka

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

Сообщение dedylka »

Цитата dedylka:



Чтобы запустить этот скрипт нужно дополнительное ПО?
CMD/BAT - [решено] Помощь с написанием Bat. Переименование файлов в папке с условием.




Нет. Сохранить в файл с расширением .vbs и запустить.



dedylka, вопрос по:


Цитата dedylka:



некоторая часть mp4 файлов одинаковая,
CMD/BAT - [решено] Помощь с написанием Bat. Переименование файлов в папке с условием.




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

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

Сообщение dedylka »

Код:

Код: Выделить всё

@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
Аватара пользователя
Iska

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

Сообщение Iska »

Цитата Iska:



А какая?
CMD/BAT - [решено] Помощь с написанием Bat. Переименование файлов в папке с условием.




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






Цитата Iska:



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




спасибо большое, я протестировал скрипт, но он у меня отрабатывает немного некорректно(

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

Таким образом папка B очень скоро будет завалена файлами(
Аватара пользователя
alpap

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

Сообщение alpap »

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



Суть: нужно перекодировать 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!
Аватара пользователя
dedylka

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

Сообщение dedylka »

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
Вложения

[Расширение png было запрещено, вложение больше недоступно.]

[Расширение png было запрещено, вложение больше недоступно.]

Ответить

Вернуться в «Скриптовые языки администрирования Windows»