Criando um arquivo txt para determinado tipo de arquivo usando lote

3

Eu tenho uma pasta contendo todos os tipos de arquivos. Digamos que meu caminho de pasta seja E:/temp .

Eu gostaria de criar, apenas para os arquivos do tipo .avi , um arquivo txt e nomear o arquivo txt como o nome do filme. então, se eu tiver 20 arquivos .avi do clipe na pasta, quero abrir 20 arquivos txt, e cada arquivo txt será nomeado após um clipe.

Além disso, dentro do arquivo txt eu preciso escrever (para todo o arquivo txt será o mesmo) a palavra "HAPPY"

Qual será o script usando o arquivo em lotes?

    
por shir 11.11.2012 / 14:25

2 respostas

2

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
)
    
por 11.11.2012 / 14:52
0

Crie um arquivo de texto chamado happy.txt contendo " HAPPY ". Crie um arquivo de lote chamado makehappy.cmd contendo este:

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

Execute o makehappy . Os novos arquivos de texto terão uma extensão dupla, mas existem maneiras de contorná-lo, se necessário.

    
por 11.11.2012 / 14:52