Você precisa usar FOR
para iterar os elementos com os quais deseja trabalhar. Veja Como fazer um loop pelos arquivos correspondentes a um curinga no arquivo de lote para detalhes.
Depois de resolver essa parte, você deverá criar o nome do arquivo .txt
. A documentação da linha de comando de FOR
pode nos ajudar aqui:
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
A última entrada é o que queremos. Queremos cortar o .avi
, então usamos ~n
em nossa variável para obter apenas o nome. É aqui que vem o %%~nf.txt
.
Começamos com %%f
, o nome do arquivo atual. Em seguida, cortamos a extensão com %%~nf
e adicionamos o .txt
... Concluído: %%~nf.txt
O último problema é quando você tenta resolver tudo em uma linha, como:
FOR %%f IN (*.avi) DO ECHO HAPPY > %%~nf.txt
Isso não funcionaria, porque o shell interpretará o >
e iniciará a saída para esse arquivo instantaneamente, o que não é o que queremos. Queremos que o ECHO
seja processado para cada arquivo, então eu simplesmente o divido em várias linhas.
@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
)