3

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

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

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

Каким будет скрипт, использующий командный файл?

2 ответа2

2

Вам нужно использовать 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
)
0

Создайте текстовый файл с именем happy.txt, содержащий « HAPPY ». Создайте пакетный файл с именем makehappy.cmd, содержащий это:

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .