Создание txt-файла для определенного типа файлов с помощью пакетной обработки

Создание txt-файла для определенного типа файлов с помощью пакетной обработки

У меня есть папка, содержащая все типы файлов. Допустим, мой путь к папке — E:/temp.

Я хотел бы создать только для .aviфайлов типа txt-файл и назвать его так же, как и название фильма. Таким образом, если .aviв папке будет 20 файлов клипов, я хочу открыть 20 файлов txt, и каждый файл txt будет назван в честь клипа.

Также внутри txt-файла мне нужно написать (для всех txt-файлов оно будет одинаковым) слово «HAPPY»

Какой будет сценарий с использованием пакетного файла?

решение1

Вам нужно использовать FORдля итерации элементов, с которыми вы хотите работать. СмотретьКак перебрать файлы, соответствующие подстановочным знакам в пакетном файледля получения подробной информации.

Как только вы решите эту часть, вам нужно будет создать имя файла .txt. Документация командной строки FORможет нам помочь здесь:

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

Последняя запись — это то, что нам нужно. Мы хотим отрезать .avi, поэтому используем ~nв нашей переменной, чтобы получить только имя. Вот откуда взялось %%~nf.txt.

Начинаем с %%f, текущего имени файла. Затем отсекаем расширение %%~nfи добавляем .txt... Готово:%%~nf.txt

Последняя проблема возникает, когда вы пытаетесь решить все это в одной строке, например:

FOR %%f IN (*.avi) DO ECHO HAPPY > %%~nf.txt

Это не сработает, потому что оболочка интерпретирует >и начнет вывод в этот файл мгновенно, а это не то, что нам нужно. Мы хотим, ECHOчтобы обрабатывалось для каждого отдельного файла, поэтому я просто разделил его на несколько строк.

@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
)

решение2

Создайте текстовый файл с именемсчастливый.txtсодержащий "СЧАСТЛИВЫЙ". Создайте пакетный файл с именемmakehappy.cmdсодержащий это:

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

Бегатьсделать счастливым. Новые текстовые файлы будут иметь двойное расширение, но при необходимости есть способы обойти это.

Связанный контент