Модераторы: bartram, Akella
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Задание на bat-файлы, задачка 
:(
    Опции темы
DarkBob
Дата 17.3.2007, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 17.3.2007

Репутация: нет
Всего: нет



Комадные файлы раньше практически не использовал, так что может кто поможет.

Само задание:
Написать bat-файл для вывода на экран списка файлов, созданных
в заданном году, имеющих заданное расширение на заданном дисководе.
При этом в списке параметров расширение и дисковод могут указываться
только один раз. Годы могут указываться произвольное количество раз и 
для каждого года отдельно должен выдаваться список файлов.
Порядок задания параметров может быть произвольный, известно только,
что имя дисковода задается ранее расширения. Таким образом, команды
a.bat 80 93 d: pas 
и
a.bat d: 93 pas 80
должны приводить к одним и тем же результатам.
PM MAIL WWW ICQ   Вверх
Akina
Дата 17.3.2007, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 42
Всего: 454



В указанной форме задача не решается.

Что будет, если дать:

a.bat d: 93 80

? даже человек не сможет определить, какое из чисел есть год, а какое - расширение.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Vaulter
Дата 18.3.2007, 01:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1724
Регистрация: 30.12.2002
Где: бункер

Репутация: нет
Всего: 22



закрепите синтаксис. откажитесь от bat smile


--------------------
PM MAIL WWW ICQ   Вверх
DarkBob
Дата 18.3.2007, 07:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 17.3.2007

Репутация: нет
Всего: нет



Да отказался бы от bat. Да все строго заданно. Дополнительное условие: Расширение не может быть цифровым.
PM MAIL WWW ICQ   Вверх
dumb
Дата 19.3.2007, 07:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 15
Всего: 158



как-то так:
Код

@echo off
setlocal
:NextPrm
shift
if "%0" == "" goto EndPrm
set prm=%0
set pf=%prm%
:NextSym
set pc=%pf:~0,1%
if %pc% lss 0 goto :NotYear
if %pc% gtr 9 goto :NotYear
set pf=%pf:~1%
if not "%pf%" == "" goto :NextSym
:YearOk
if not "%prm:~2,1%" == "" if "%prm:~3,1%" == "" goto ErrorPrm
if "%prm:~3,1%" == "" if %prm% lss 70 (set prm=20%prm%) else (set prm=19%prm%)
set Years=%Years%%prm% 
goto :NextPrm

:NotYear
if "%prm:~1,1%" == ":" (
  if not "%Drive%" == "" goto :ErrorPrm
  set Drive=%prm:~0,1%:
  goto :NextPrm
)

if not "%Ext%" == "" goto :ErrorPrm
set Ext=%prm%
goto :NextPrm

:ErrorPrm
echo Error in parameter '%prm%'
endlocal
goto :EOF

:EndPrm
for %%Y in (%Years%) do (
  echo %%Y:
  for /F "tokens=*" %%f in ('dir /s /b %Drive%\*.%Ext%') do (
    for /F "tokens=1,2,3* delims=. " %%i IN ("%%~tf") do (
      if "%%k" == "%%Y" echo %%~ff
    )
  )
)
endlocal


так как задается только "дисковод" (не путь), то производится рекурсивный поиск по диску - на каком-нибудь c: будет долго карпеть...  smile 
PM MAIL   Вверх
DarkBob
Дата 20.3.2007, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 17.3.2007

Репутация: нет
Всего: нет



Спасибо.

Начал разбираться, встретил несколько незнакомых моментов: что есть lss, gtr и, например, в %prm:~3,1% что означает :~3,1   ?

И еще, подобных конструкций раньше не видел: for /F "tokens=1,2,3* delims=. " %%i IN ("%%~tf") ... Как работает?


PM MAIL WWW ICQ   Вверх
dumb
Дата 20.3.2007, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 15
Всего: 158



Код

if /?
set /?
for /?

smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Windows"
December
bartram
Akella

Запрещается!

1. Обсуждать взлом и делиться кряками

2. Способствовать созданию и распространению вирусов

  • Для бессмертных бородатых вопросов типа Win vs Nix есть специальный форум Религиозные Войны
  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • ВСЕГДА УКАЗЫВАЙТЕ ВЕРСИЮ ОС

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, December, bartram, Akella.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS Windows | Следующая тема »


 




[ Время генерации скрипта: 0.0463 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.