Criando um arquivo txt para determinados tipos de arquivos usando lote

Criando um arquivo txt para determinados tipos de arquivos usando lote

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 .aviarquivos do tipo, um arquivo txt e nomear o arquivo txt como o nome do filme. então, se eu tiver 20 .aviarquivos 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 FORpara 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 .txtarquivo. A documentação da linha de comando FORpode 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 ~nem nossa variável para obter apenas o nome. É daí que %%~nf.txtvem.

Começamos com %%f, o nome do arquivo atual. Depois cortamos a extensão %%~nfe 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 ECHOseja 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.

informação relacionada