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 .avi
archivos tipo, un archivo txt y nombrar el archivo txt como el nombre de la película. Entonces, si tengo 20 .avi
archivos 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 FOR
para 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 .txt
archivo. La documentación de la línea de comando de FOR
puede 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 ~n
en nuestra variable para obtener solo el nombre. De aquí %%~nf.txt
viene el.
Comenzamos con %%f
, el nombre del archivo actual. Luego cortamos la extensión con %%~nf
y 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 ECHO
se 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.