4 votos

Cambiar el nombre de la subcadena de nombre de archivo según una coincidencia parcial de nombre de archivo en la misma carpeta

Tengo una carpeta llena de archivos (.avi y .archivos txt):

'MyVideo1-MyEncode.avi'
'MyVideo1.avi 16-05-2019 15-41-01.txt'

'My Video 2.avi'
'My Video 2.avi 16-05-2019 16-43-11.txt'

'My Video 3 [Summer]-MyEncode.avi'
'My Video 3 [Summer].avi 16-05-2019 17-57-24.txt'

'My Video 4-(Fall).avi'
'My Video 4-(Fall).avi 13-05-2019 19-29-16.txt'

'My Video 5-(Winter)-MyEncode.avi'
'My Video 5-(Winter).avi 11-05-2019 11-15-05.txt'

Si el .archivo rar incluye "-MyEncode" en el nombre de archivo, me gustaría, a continuación, copie esta parte de la cadena en el nombre de archivo del archivo de texto correspondiente.

por ejemplo,

"MyVideo1-MyEncode.avi" incluye el texto "-MyEncode" en el nombre de archivo

así: "MyVideo1.avi 16-05-2019 15-41-01.txt"

debería ser rebautizado como: "MyVideo1-MyEncode.avi 16-05-2019 15-41-01.txt"

en el otro lado:

"Mi Video 2.avi" no contienen la cadena "-MyEncode" por lo que el correspondiente .txt archivo no debe ser cambiado de nombre.

Tengo una serie de carpetas que contienen los archivos de este tipo.

Estoy pensando en que necesita para ejecutar la línea de comandos o un archivo por lotes para algo como:

for /R %x in (*.avi) do ren "%x" *.txt

sin embargo, esto no cuenta para el parcial nombre de archivo que coincida.

Puede alguien por favor ayuda?

PS - Si me hace las cosas más fáciles, puedo cambiar el nombre de el como de "Mi Video 3 [Verano]-MyEncode.avi" a "My_Video_3_[Verano]-MyEncode.avi" (es decir, para quitar los espacios)

4voto

mael' Puntos 8

Esto terminó siendo una caliente lío para mí, ya que el -MyEncode se coloca en el medio del nombre del archivo, pero esto es lo que se me ocurrió y funciona con base en la información que usted ha proporcionado:

@echo off

set "dir=C:\Your\Directory"
set "enc=-MyEncode"

setlocal EnableDelayedExpansion
for /r "%dir%" %%A in ("*%enc%*.avi") do (
    set "sub=%%~nxA"
    set "name=!sub:~0,-13!"
    for /r "%dir%" %%B in ("*!name!*.txt") do (
        set "txt=%%~nxB"
        set "num=!txt:~-24!"
        set "fin=!name!!enc!.avi!num!"
        if not !txt!==!fin! ren "%dir%\!txt!" "!fin!"
    )
)
endlocal

Para empezar, setlocal EnableDelayedExpansion es necesaria ya que estamos tratando con variables utilizadas a lo largo de nuestra anidada para el bucle. Estas variables se utilizan para hacer las cosas un poco más fáciles de digerir y para cambiar al volver y editar, así que de frente me he conjunto de variables para el directorio en el que se encuentran los archivos (dir) y para la cadena que desea insertar en sus nombres de archivo (enc).

La inicial de bucle comprueba el directorio para todas las instancias .avi archivos que contengan la cadena de caracteres -MyEncode, y para cada instancia de la iteración de un parámetro %%A se devuelve y se utiliza para do un par de otros comandos. El primer comando en el loop inicial establece una variable (sub) con el nombre de archivo (n) y la extensión (x) %%A parámetro - esto corta toda la información de directorio, ya no vamos a necesitar. El segundo comando utiliza nuestro nuevo sub variable a definir una nueva variable (name) que resta el pasado 13 de caracteres del nombre del archivo (la última de ser 13 -MyEncode.avi) por lo que se puede utilizar para la siguiente parte: el anidado de bucle.

Como la inicial de bucle, nuestro anidados uno busca en nuestro directorio, pero en vez de buscando .los archivos avi que contiene nuestro enc variable, que busca .archivos txt que contiene nuestro nuevo name variable. El primer comando, mientras que la configuración de la txt variable es reducir %%B a su nombre de archivo y extensión, a continuación, establecemos un num variable que reduce el txt variable a su pasado 24 de caracteres (números y espacios en blanco al final). Por último, se establece la variable fin a lo que quiere el nuevo archivo de texto llamado: !name!!enc!.avi!num! - este es el nombre establecido en la inicial para el bucle con -MyEncode añadido, .avi añadido a esto, entonces los números que estaban originalmente en la final. A partir de aquí, podemos utilizar un if not comando para decir que: para todos los txt variables que no son iguales a las de sus fin contrapartes, cambiar el nombre de la txt a fin. Yo uso if not aquí porque los archivos de texto que ya se han cambiado para reflejar sus correspondientes .los archivos avi no se necesita ser cambiado de nombre otra vez.

Espero que esto ayude!

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: