Назад | Перейти на главную страницу

Разберите все текстовые файлы в папке с помощью команды FOR / F

В папке есть номера txt файла. Теперь я хочу открыть весь текстовый файл и распечатать его содержимое в один текстовый файл. Условие состоит в том, что я хочу пропустить первые две строки каждого текстового файла. Я пытался выполнить следующую команду, но не смог.

For /F "skip=2" %H IN (*.*) Do echo %H  1>>Content.txt

Ошибка отображения

The system cannot find the file *.*.

То же самое произошло, если я использовал (.) или (%1) вместо того (*.*).

Но если упомянуть имена файлов, то работает

For /F "skip=2" %H IN (aa.txt ab.txt ac.txt) Do echo %H  1>>Content.txt

Какую ошибку я делаю.

Не использовать /F если вы хотите использовать подстановочный знак вместо буквального набора файлов. Различия между "набором" и "набором файлов" заключаются в следующем: FOR /?

FOR %variable IN (set) DO command [command-parameters]
...
(set)      Specifies a set of one or more files.  Wildcards may be used.

Против

FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
...
file-set is one or more file names. [note: no mention of wildcards]

Если вы хотите скопировать все файлы * .txt, оберните FOR вокруг снаружи:

FOR %A IN ( *.txt ) DO (
    FOR /F "skip=2" %H IN ( %A ) DO (
        ECHO %H 1>>Content.txt
    )
)

Имейте в виду, что ваш For /F "skip=2" %H цикл будет читать файл по одной строке за раз, а затем разбивать строку на отдельные токены, используя пробел или табуляцию в качестве разделителя. Также из FOR /?:

Каждый файл открывается, читается и обрабатывается перед переходом к следующему файлу в наборе файлов. Обработка состоит из чтения файла, разбиения его на отдельные строки текста и последующего анализа каждой строки на ноль или более токенов. Затем вызывается тело цикла for со значением (значениями) переменной, равным найденной строке (строкам) токена.

Возможно, это нежелательное поведение. Вы можете добавить tokens=* чтобы получить все токены в одной переменной. Я также добавляю опцию usebackq поэтому мы можем заключить в двойные кавычки набор файлов, если любое из имен файлов * .txt должно содержать пробел:

FOR %A IN ( *.txt ) DO (
    FOR /F "tokens=* usebackq skip=2" %H IN ( "%A" ) DO (
        ECHO %H 1>>Content.txt
    )  
)