Crear un archivo txt para cierto tipo de archivos usando lotes

Crear un archivo txt para cierto tipo de archivos usando lotes

Tengo una carpeta que contiene todo tipo de archivos. Digamos que la ruta de mi carpeta es E:/temp.

Me gustaría crear, solo para los .aviarchivos tipo, un archivo txt y nombrar el archivo txt como el nombre de la película. Entonces, si tengo 20 .aviarchivos de clip en la carpeta, quiero abrir 20 archivos de texto y cada archivo de texto tendrá el nombre de un clip.

Además, dentro del archivo txt necesito escribir (para todos los archivos txt será el mismo) la palabra "FELIZ".

¿Cuál será el script que utilizará el archivo por lotes?

Respuesta1

Debe utilizar FORpara iterar sobre los elementos con los que desea trabajar. VerCómo recorrer archivos que coinciden con el comodín en un archivo por lotespara detalles.

Una vez que haya resuelto esa parte, querrá crear el nombre de su .txtarchivo. La documentación de la línea de comando de FORpuede ayudarnos aquí:

In addition, substitution of FOR variable references has been enhanced.
You can now use the following optional syntax:

    %~I         - expands %I removing any surrounding quotes (")
    %~fI        - expands %I to a fully qualified path name
    %~dI        - expands %I to a drive letter only
    %~pI        - expands %I to a path only
    %~nI        - expands %I to a file name only

La última entrada es la que queremos. Queremos cortar .avi, por lo que usamos ~nen nuestra variable para obtener solo el nombre. De aquí %%~nf.txtviene el.

Comenzamos con %%f, el nombre del archivo actual. Luego cortamos la extensión con %%~nfy tachamos el .txt... Listo:%%~nf.txt

El último problema es cuando intentas resolverlo todo en una sola línea, como:

FOR %%f IN (*.avi) DO ECHO HAPPY > %%~nf.txt

Eso no funcionaría, porque el shell interpretará >y comenzará a enviar ese archivo instantáneamente, que no es lo que queremos. Queremos que ECHOse procese para cada archivo, así que simplemente lo divido en varias líneas.

@ECHO OFF

REM Iterate over all *.avi file in the current directory
FOR %%f IN (*.avi) DO (
    REM Cut off the extension from %%f, tack on .txt and 
    REM use it as the filename for our HAPPY output
    ECHO HAPPY > %%~nf.txt
)

Respuesta2

Crea un archivo de texto llamadofeliz.txtque contiene "FELIZ". Cree un archivo por lotes llamadohacerfeliz.cmdque contiene esto:

for %%i in (*.avi) do copy happy.txt "%%i.txt"

Correrhacer feliz. Los nuevos archivos de texto tendrán una doble extensión, pero hay formas de evitarlo si es necesario.

información relacionada