Eu tenho uma pasta contendo todos os tipos de arquivos. Digamos que o caminho da minha pasta seja E:/temp
.
Gostaria de criar, apenas para os .avi
arquivos do tipo, um arquivo txt e nomear o arquivo txt como o nome do filme. então, se eu tiver 20 .avi
arquivos de clipe na pasta, quero abrir 20 arquivos txt, e cada arquivo txt receberá o nome de um clipe.
Além disso, dentro do arquivo txt preciso escrever (para todos os arquivos txt será igual) a palavra "FELIZ"
Qual será o script usando arquivo em lote?
Responder1
Você precisa usar FOR
para iterar sobre os elementos com os quais deseja trabalhar. VerComo percorrer arquivos correspondentes ao curinga no arquivo em lotepara detalhes.
Depois de resolver essa parte, você desejará criar o nome do .txt
arquivo. A documentação da linha de comando 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. É daí que %%~nf.txt
vem.
Começamos com %%f
, o nome do arquivo atual. Depois cortamos a extensão %%~nf
e fixamos no .txt
... Feito:%%~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á >
e começará a enviar para esse arquivo instantaneamente, o que não é o que queremos. Queremos que ECHO
seja processado para cada arquivo, então simplesmente divido-o 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
)
Responder2
Crie um arquivo de texto chamadofeliz.txtcontendo "FELIZ". Crie um arquivo em lote chamadofaça feliz.cmdcontendo isto:
for %%i in (*.avi) do copy happy.txt "%%i.txt"
Correrfazer feliz. Os novos arquivos de texto terão extensão dupla, mas existem maneiras de contornar isso, se necessário.