He estado comprobando por todas partes y parece que no puedo encontrar el recurso que necesito.

Todo lo que he encontrado hasta ahora solo compara el archivo completo, pero eso no es lo que estoy buscando.

He visto herramientas como 'Comparación de archivos' para cmd para ayudar, pero la forma en que se realiza la comparación no satisface la necesidad.

FC [filepath1] [filepath2]

¿Hay alguna forma de hacer esto?

Tome la primera línea de un archivo de texto y compárelo con cada línea del segundo archivo y genere el archivo coincidente creando un nuevo archivo de texto con el nombre del archivo y complételo con> Nombre del archivo (primer archivo de texto)> Todo el archivo coincidente (del segundo archivo). Luego vuelve a la segunda línea del primer archivo de texto y lo compara con cada línea del segundo archivo y crea otro archivo de texto haciendo lo mismo hasta que el primer archivo se vacía.

La forma en que obtuve todos los archivos en un archivo de texto es ejecutando el siguiente comando.

Get-ChildItem -Path D:\Documents\Projects\audio -Recurse | Select-Object @{n='File'; e={$_.Name + "," + $_.LastWriteTime}} | Out-File "D:\Documents\Projects\audio\Log.txt"
Get-ChildItem -Path D:\Documents\Projects\video -Recurse | Select-Object @{n='File'; e={$_.Name + "," + $_.LastWriteTime}} | Out-File "D:\Documents\Projects\Video\Log.txt"

Compararé el nombre del archivo de video en el primer documento de texto con cada nombre de los archivos de audio en el segundo archivo de texto.

Algunos videos tienen alrededor de 2 audios, otros alrededor de 8 y todos tienen el mismo nombre. Ya estoy buscando una forma de cortar los últimos 3 caracteres del nombre del archivo.

El nombre se escribe así

Somefilm_v1.mxf

Somefilm_a1.mxf

Somefilm_a2.mxf

Somefilm_a3.mxf

V1 se refiere al video 1 y a1 se refiere al audio 1. FileName_ es el mismo, solo los 2 caracteres a * / v1 son diferentes. así que estoy investigando la forma de no verificar los últimos 2/3 caracteres del nombre del archivo. podría tener que aumentarlo a 5 si también verifica el formato del archivo.

Si esto también se puede hacer con el lote antes de que ocurra la comparación, también sería genial.

Estoy buscando que se haga por lotes si es posible, por favor.

0
A Person 27 sep. 2019 a las 12:21

1 respuesta

La mejor respuesta

Quiere recorrer el contenido de un archivo. Lo mejor para hacer esto es un ciclo for /f. Pero ni siquiera necesitas un archivo. En su lugar, simplemente recorra todos los archivos *_v1.mxf. Luego, divide el nombre de la película y agrega todos los nombres de archivo <MovieName_a*>:

@echo off
setlocal enabledelayedexpansion

for %%a in (*_v1.*) do (
  set "all="%%a""
  for /f "delims=_" %%b in ("%%~na") do (
    for %%c in ("%%b_*a*") do set all=!all! "%%c"
  )
  echo !all!
)

Si por alguna razón realmente necesita recorrer un archivo, reemplace el primer bucle for %%a con un for /f "delims=" %%a in (file.txt) do (

1
Stephan 30 sep. 2019 a las 14:09