Отправляет email-рассылки с помощью сервиса Sendsay

[TC] Обработка кучи файлов в bat

Здравствуйте.

Подскажите, пожалуйста, как в bat-файле описать обработку всех
файлов в текущей папке по определенной маске?
То есть, есть, например, команда:
kych -b8 filename.ext
Самостоятельно маску эта команда обработать не может, то есть,
написать просто:
kych -b8 *.ext
неполучится.

Собственно, вопрос: можно ли как-нибудь заставить такую команду
отработать все файлы с расширением "ext" в данной папке?

Ответить   Vladimir Dovydenkov Fri, 05 Mar 2004 22:13:26 +0300 (#97303)

 

Ответы:

for %%i in (*.htm) do \util\unicod /o %%i /k

--
С наилучшими пожеланиями
Владимир Лукьянов

Ответить   Sat, 6 Mar 2004 01:33:56 +0300 (#97361)

 

Здравствуйте, Владимир.

Original Message VL> for %%i in (*.htm) do \util\unicod /o %%i /k

Заработало, спасибо, тема закрыта.

Ответить   Vladimir Dovydenkov Sat, 06 Mar 2004 10:18:52 +0300 (#97470)

 

Привет всем.

Давайте поблагодарим Владимира Лукьянова, который напомнил нам
команду:

В связи с этим такой вопрос.

По этой команде длинные имена файлов в результате преобразуются в
досовский формат (остаются первые 8 символов). Я пытался заключать
имена в Ковычки, но ничего не изменилось.

Обращаюсь ко всем:как правильно написать эту команду, чтобы сохранить
длинные имена файлов.

С уважением,
Мартынов Владимир

Ответить   "Rostov_library" Sat, 6 Mar 2004 14:29:20 +0300 (#97640)

 

Забыл отметить, что двойные проценты ставятся только в тексте
бат-файлов. Если команда выполняется непосредственно из командной
строки, то ставятся одинарные проценты.
for %i in (*.htm) do \util\unicod /o %i /k

Под виндоуз экс-пи команда
for %%i in (*.zip) do "c:\program files\winrar\winrar" x -o+ "%%i"
в бат-файле прекрасно обрабатывает длинные имена.
Не знаю про 98 и просто ДОС. Могу предложить попробовать
воспользоваться вместо бат-файла cmd-файлом. В cmd имеет больше
возможностей. Из них я пользуюсь только запуском программ с
определённым приоритетом, но помнится там много чего интересного есть.
Возможно, проблема не в передаче длинных имён, а в программе, не
принимающей длинные имена в качестве параметров. Тут надо более
конкретно разбираться с вашим примером.

Что делать, если в цикле надо выполнять не одну, а несколько команд?
Бывает удобно использовать команду вызова другого бат-файла,
предназначенного для обработки одного файла, передавая ему имя файла
как параметр.
for %%i in (*.zip) do call 2.bat "%%i"

--
С наилучшими пожеланиями
Владимир Лукьянов
Москва
mailto:l***@m*****.ru

Ответить   Sat, 6 Mar 2004 20:50:00 +0300 (#97997)

 

Здравствуйте!

По-моему в win98/95 мне попадалась переменная lfnfor (или forlfn). К
сожалению пользовался я этим уже очень давно и сейчас уже не помню
деталей. Но за обработку длинных имён в командной строке отвечает
именно она. Если нужно, попробую посмотреть и ответить более подробно.

С уважением,

Сергей Флейтин.

Ответить   07 Mar 2004 13:13:19 +0300 (#98377)

 

Hello Sergey Fleytin, 7-Mar-2004 13:13 you wrote:

Действительно, lfnfor. Вот что она выдала на запрос о помощи:

Разрешение/запрещение длинных имен файлов при обработке команд FOR.

LFNFOR [ON | OFF]

Ввод LFNFOR без параметров отображает текущее значение режима LFNFOR.

Режим расширенной обработки комбинации Ctrl-C (LFNFOR): откл

Вот после этого я немного офигел. Как связаны между собой обработка CTRL+C и
длинные имена?

P.S. Винда 98.

Ответить   "Egor L. Ryabchikov" Sun, 7 Mar 2004 19:50:56 +0300 (MSK) (#98449)

 

Привет всем.

Исходное сообщение От: Egor L. Ryabchikov <eg***@c*****.org>

Большое спасибо Егору Рябчикову.

Команда

lfnfor on

помогла.
Если раньше в команде for %%i in (*.htm)...

при переборе списка *.htm длинные имена преобразовывались в короткие,
после вставки этой команды в bat-файл, все стало на место.

Правда, теперь смущает другое:
после обработки всего списка необходимо ли выдавать команду

lfnfor off

почему по умолчанию обработка длинных имен отключена, и что будет
плохого, если обработку длинных имен не отключать?

С уважением, Мартынов Владимир

Ответить   "Rostov_library" Mon, 8 Mar 2004 19:48:20 +0300 (#99160)

 

Здравствуйте, уважаемые участники рассылки!
Владимир, а где можно просветиться по этому поводу (узнать язык команд
.bat-и .cmd-файлов)? Вот я, например, из приведённой вами команды не понял,
что такое /o и /k. Где обо всём этом можно поподробнее узнать?
--
С уважением,
Андрей Поликанин

Ответить   Mon, 8 Mar 2004 13:43:01 +0300 (#98993)

 

Здравствуйте, Андрей,

Про бат-файлы я читал в ДОСовских хэлпах. Помнится, там всё достаточно
подробно описано. Вот только где теперь ДОС взять я не знаю.
А про виндузовые скрипты я и сам ничего особенно не смотрел. Наверное,
и книжки есть, и хэлпы, если кто знает, подскажите пожалуйста.

Это был пример из моей практики. Программа UNICOD была весьма
популярна среди незрячих пользователей ещё под ДОСом, и никакого
отношения не имеет к кодировке Unicode. Она позволяет перекодировать
текстовые файлы из одной кодировки в другую. В данном примере UNICOD
перекодирует HTML-файл в кодировке виндоуз (1251) в KOI8-R. Ключи, о
которых вы спрашиваете, суть ключи программы UNICOD, /o означает
кодировку 1251, а /k - KOI8-R. Но беда в том, что UNICOD не понимает
масок * и ? И для обработке сразу всех файлов приходится использовать
цикл ДОС.

Короче говоря, за словом do идёт имя выполняемой команды или
программы, а всё, что идёт за ней, суть параметры уже именно этой
программы или команды.

--
С наилучшими пожеланиями
Владимир Лукьянов
Москва
mailto:l***@m*****.ru

Ответить   Mon, 8 Mar 2004 22:44:24 +0300 (#99243)

 

Здравствуйте, уважаемые участники рассылки!
Владимир, а в каких именно хэлпах вы это читали и есть ли такие хэлпы в
эмуляторе DOS, который запускается из-под Windows Millennium (98)?
--
С наилучшими пожеланиями,
Андрей Поликанин

Ответить   Mon, 8 Mar 2004 22:57:35 +0300 (#99247)

 

Здравствуйте, Андрей,

В ДОС 6.22 и в пи-си-ДОС 7.0 были встроенные хэлп системы.

Насколько мне известно, там хэлпов по ДОСу не осталось.

--
С наилучшими пожеланиями
Владимир Лукьянов
Москва

Ответить   Thu, 11 Mar 2004 00:26:56 +0300 (#101806)

 

Hello Vladimir Dovydenkov, 5-Mar-2004 22:13 you wrote:

Следует посмотреть в сторону команды for. В командной строке набери for/?
для помощи. Команда встроенная.

Пример. В каталоге находятся файлы, названные 2xx, где xx - символы от 00 до
99. Т.е, 200, 201, ..., 299. Мы хотим дать команду dir имя_файла для каждого
файла, т.е., например:
dir 210

Для этого даём такую команду:
for %s in (2??) do dir %s
где
%s - переменная, т.е. та штука, которая будет менять значение. В данном
случае туда пишется имя файла. Если команда for используется в бат-файле, то
символ процента надо удвоить (чтоб не возникло путаницы с тамошними
переменными).
(2??) - маска файлов. Обрати внимание, что скобки необходимы.
dir %s - наша команда. В качестве параметра к ней - та самая переменная, в
которой хранится имя файла.

Чтобы было удобнее обозревать результат, следует в конце строчки добавить
перенаправление в файл, вот так:
for %s in (2??) do dir %s > result.txt
где
result.txt - в этот файл запишется всё, что выведется на экран.

результат в файле.

Ответить   "Egor L. Ryabchikov" Sun, 7 Mar 2004 02:24:56 +0300 (MSK) (#98048)