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

3

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

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

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

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

Шир
источник

Ответы:

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
)
Der Hochstapler
источник
Привет, спасибо ооочень большое! это работает, и я счастлив. просто еще одна вещь ... я пытаюсь понять, как работает петля. интересующие меня клипы разделены на множество подпапок. так что у меня есть основная папка, внутри гораздо больше папок, каждая папка содержит другой уровень папок, а клипы находятся внутри третьего уровня. и я хочу сделать то же, что вы учили меня для всех этих папок, но вместо того, чтобы скопировать файл bat, который вы мне дали, и запустить его для каждой из подпапок, я хочу иметь возможность сделать это из внешней папки (основной ) автоматически. Еще раз спасибо !!!! Шир
Шир
поэтому я написал это: FOR / r %% f IN (* .avi) DO (%% ~ nf.txt ECHO Philips> %% ~ nf_Medical_System.txt), но текстовый файл находится там, где находится файл bat ... и Я хочу, чтобы каждый текстовый файл находился под своим фильмом ... как я могу найти его в подпапке, к которой он принадлежит? Еще раз спасибо !!!! Шир
Шир
а также, файлы должны быть локально на моем компьютере, чтобы он работал?
Шир
@shir Попробуйте использовать %%~dpnf.txtвместо этого. Затем следует использовать букву диска + полный путь + имя + .txt. Может быть, это поможет. В противном случае обязательно дайте мне знать :)
Der Hochstapler
Ты самый лучший! благодарю вас! работает отлично
ши
0

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

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

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

boot13
источник