Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах

Модерирует : KLASS, IFkO

vu1tur (14-11-2006 16:59): http://forum.ru-board.com/topic.cgi?forum=62&topic=9040  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

   

hacsoft

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Задачи на bat-файлах
Вопросы, задачи и их решения по работе с командными файлами, а также сопутствующие ссылки.
 
Смежные темы:
В помощь системному администратору » Автоматизация администрирования
Программы » Командная строка, батники\сценарии
 
Полезные ссылки:
· Cmd. Описание от разработчиков
· Набор GNU утилит для win32
· Встроенный справочник по командам: hh ntcmds.chm
· Пакет утилит для организации интерфейса в bat-файлах
· Использование ansi.sys
· cmdow — изменение параметров и видимости дос-окна
· blat — отправка почты из консоли
 
Готовые решения и частые вопросы:
· Создание листинга директорий на примере создания плейлиста
· Разименовывание переменных
· Переименовывание файлов по дате создания
· Запуск сетевого подключения
· Запуск bat файлов как сервис
· Пример выполнения команд по результату команды ping
· Использование даты на день раньше чем сегодня
 
Невозможности — что нельзя сделать с помощью командных файлов:
· изменть конфигурацию IP на удаленной машине (без помощи rcmd.exe) [добавил ALEF]
 
 
Дополняем шапку: добавляем готовые решения, полезные ссылки.
 
Примечание: Большие куски кода заключайте в тэг [more]  
 
Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!!
 
Старая версия первого сообщения

Всего записей: 116 | Зарегистр. 18-11-2005 | Отправлено: 22:58 18-11-2005 | Исправлено: Elroir, 05:50 11-11-2006
Open999

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Если не критично расположение файлов именно в этой папке, делай следующее  Копируй файл в нужный каталог  А затем перемещай файл из IN в IN\Parsed

Расположение файлов именно в этой папки - критично! так мысль мне тоже пришла сразу в голову, но до конца дня эти файлы должны все лежать в этой папке.

Всего записей: 3 | Зарегистр. 18-08-2006 | Отправлено: 12:57 18-08-2006
Kirillhome



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
GreaseOD
Боюсь, что силами bat-файла замену строк (части строк) в произвольном текстовом файле через bat-файл сделать проблематично - есть специфичные символы (например, кавычка "), при наличии которых в строке могут быть проблемы.

Всего записей: 426 | Зарегистр. 23-11-2004 | Отправлено: 13:06 18-08-2006
KapralBel



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Open999
Тогда делай следующее
для каждого файла, например 123.txt - создавай скрытый файл 123.txt.old - и по его наличию проверяй, копировался ли этот файл
 
Либо просто копируй всю папку, XCOPY D:\In\*.* D:\In_1 /D

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 13:23 18-08-2006
anvarga

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
И еще маленький вопросик: Как очистить папку с подкаталогами и файлами, чтобы она осталось пустая?
 
А с корзиной нет уж все и просто..

Всего записей: 6 | Зарегистр. 17-08-2006 | Отправлено: 13:35 18-08-2006
Kirillhome



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Open999
Если не рассматривать возможность изменения файлов, то новые, к примеру, можно копировать таким образом:
 

Код:
 
@echo off
if exist tek.txt del /q tek.txt
if exist ok.tmp del /q ok.tmp
if not exist copy.txt echo > copy.txt
for %%f in (*.*) do echo %%f >> tek.txt
 
for /f "delims=" %%s in (tek.txt) do call :sss "%%s"
goto:eof
 
:sss
set str_pois=%~1%
if not %str_pois%==copy.txt (
   if not %str_pois%==tek.txt (
      find /c "%str_pois%" copy.txt | find /c ": 0" > f.tmp
      for /f %%i in (f.tmp) do if %%i==0 echo ok > ok.tmp
      del /q f.tmp
      if not exist ok.tmp (
         copy "%str_pois%" D:\temp\tekst2\"%str_pois%" > nul
         echo %str_pois% >> copy.txt)
      if exist ok.tmp del /q ok.tmp
    )
)
 

 
KapralBel

Цитата:
Либо просто копируй всю папку, XCOPY D:\In\*.* D:\In_1 /D

Даже обидно, что не вспомнил о такой возможности.... Гениальное - просто!

Всего записей: 426 | Зарегистр. 23-11-2004 | Отправлено: 13:43 18-08-2006 | Исправлено: Kirillhome, 13:47 18-08-2006
anvarga

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Пожалуйста, только один вопрос
 
Поиск и удаление каталога на одном диске. Имя диска и католага в самом бат явно.
 

Всего записей: 6 | Зарегистр. 17-08-2006 | Отправлено: 14:25 18-08-2006
Open999

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Копировать всю папку нельзя. В каталоге назначения должны быть только новые файлы, т.к. они попадают на вход обработчика.  
 
2 Kirillhome - спасибо, очень помогло!

Всего записей: 3 | Зарегистр. 18-08-2006 | Отправлено: 14:40 18-08-2006
Kirillhome



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
anvarga
if exist D:\Temp\DATE rmdir /q /S D:\Temp\DATE

Всего записей: 426 | Зарегистр. 23-11-2004 | Отправлено: 14:43 18-08-2006
ViSiToR



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Kirillhome

Цитата:
Я, похоже, решил (не красиво, но.. - решил) перекодировку в UTF-8

Большое спасибо... мне когда на мыло пришло сообщение с этим постом (в котором ты привёл батник), то я слегка испугался, насколько страшным может выглядеть батник   ... Думаю этот батник, как минимум заслуживает помещения в шапку
 
anvarga

Цитата:
Как очистить папку с подкаталогами и файлами, чтобы она осталось пустая?

 

Код:
rem Удалить всю папку...
chcp 1251
rmdir /q /s "Путь\к папке"
 
rem А потом создать в этом же месте папку с таким-же именем...
md "Путь\к папке"

 

Цитата:
имя юзера неизвестно.

Если имя юзера не известно, а нужно удалить папку на рабочем столе, то можно так:
 
Для русской Windows...

Код:
chcp 1251
if exist "%userprofile%\Рабочи~1\Имя Папки" rmdir /q /s "%userprofile%\Рабочи~1\Имя Папки"

 
Для Английской Windows...

Код:
 
if exist "%userprofile%\desktop\Имя Папки" rmdir /q /s "%userprofile%\desktop\Имя Папки"

 
Добавлено:
Есть такой вопрос - Как в Win98, показать на экран последние символы переменной без путей?
Т.е, вот например в WinXP, чтобы осуществить такое, нужно прописать команду так:
 

Код:
For %%a in ("%userprofile%") do echo %%~na
pause

 
Т.е в данном случае, вывод на экран мы получим имя юзера...
 
Вот хетолось точно также, только не используя команду for (ведь на сколько мне известно, она в Win98 не работает) - реально такое?
 
И ещё, где можно посмотреть такого рода ключи как в команде for (~x, ~n и т.д), только для обычных команд (например, для использования в переменных, как с отбором символов - %Переменная:~-1%) ?

----------
ViSiToR a.k.a CreatoR
CreatoR это не ник, CreatoR это стиль жизни!

Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 04:56 19-08-2006 | Исправлено: ViSiToR, 05:03 19-08-2006
ViSiToR



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Скажите, а можно ли батником, проверить существование файла по ссылке? Например, есть такая ссылка http://ссылка.zip, и нужно проверить, существует ли файл по этой ссылке - т.е другими словами, осуществить проверку на то, является ли ссылка битой, или нет. Реально на батниках?

----------
ViSiToR a.k.a CreatoR
CreatoR это не ник, CreatoR это стиль жизни!

Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 19:26 19-08-2006
art569

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Предлагаю такой способ.
Скачиваем программу curl портированую под Windows.
Дальше пишем батник
Код:
curl.exe --head -s http://ссылка.zip |findstr "HTTP.*200.*"
if not errorlevel 1 echo Файл существует


Всего записей: 32 | Зарегистр. 07-11-2005 | Отправлено: 22:50 19-08-2006
ViSiToR



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
art569
Большое сенкс... но дело в том, что мне она не совсем подходит, эта утилита относительно много весит...
 
Может есть способ средствами одного лиш батника?

----------
ViSiToR a.k.a CreatoR
CreatoR это не ник, CreatoR это стиль жизни!

Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 12:38 20-08-2006
art569

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Большое сенкс... но дело в том, что мне она не совсем подходит, эта утилита относительно много весит...

Эту утилиту можно сжать до 156672 с помощью UPX.
 
На мой взгдяд решить эту задачу только средствами батника нельзя.

Всего записей: 32 | Зарегистр. 07-11-2005 | Отправлено: 13:23 20-08-2006
evle



1 + int rand(100);
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ViSiToR

Цитата:
Может есть способ средствами одного лиш батника?

Средства батников в чистом виде весьма ограничены. Полный список стандартных комманд можно получить во встроенной справке (hh ntcmds.chm). И то, большая часть там - внешние утилиты, включённые в стандартную поставку.
Почти все возможности батников заключаются в получении данных от одной утилиты или из файла и отправке их другой утилите. Грамотно совмещая внешние программы, можно получить красивое, быстрое и удобное решение.  
Ничего для работы с http в стандартный набор не входит, значит нужна утилита.
В теории можно попробовать работать через telnet, вручную отправляя нужные команды и обрабатывая результат. Однако практической пользы от такого решения я не вижу: экономя 260 Кб (даже меньше), получим нечто очень длинное, запутанное и, вероятно, привязанное к ОС. При этом придётся ещё помучаться долго с написанием батника.

----------
For every complex problem, there is a solution that is simple, neat, and wrong.

Всего записей: 2110 | Зарегистр. 03-02-2005 | Отправлено: 14:26 20-08-2006
Smitis



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ViSiToR

Цитата:
И ещё, где можно посмотреть такого рода ключи как в команде for (~x, ~n и т.д), только для обычных команд (например, для использования в переменных, как с отбором символов - %Переменная:~-1%) ?

Нигде. Такие "ключи" работают только с переменными команды for и с параметрами, переданными через командную строку или подпрограмме, т.е. %1 %2 %3 и т.д. Как вариант, использовать в командном файле подпрограммы, передавя им значения переменных.

Всего записей: 3445 | Зарегистр. 09-02-2003 | Отправлено: 14:45 20-08-2006
ViSiToR



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Smitis
 

Цитата:
Нигде. Такие "ключи" работают только с переменными команды for

Те ключи которые я привё в пример, да. Но я имел в виду, похожие ключи на эти...
 
А на счёт моего вопроса:
 

Цитата:
Есть такой вопрос - Как в Win98, показать на экран последние символы переменной без путей?  
Т.е, вот например в WinXP, чтобы осуществить такое, нужно прописать команду так:  
 

Код:
For %%a in ("%userprofile%") do echo %%~na  
pause  

 
Т.е в данном случае, вывод на экран мы получим имя юзера...  
 
Вот хетолось точно также, только не используя команду for (ведь на сколько мне известно, она в Win98 не работает) - реально такое?

 
Кто-нибудь может плиз ответить?

----------
ViSiToR a.k.a CreatoR
CreatoR это не ник, CreatoR это стиль жизни!

Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 15:06 20-08-2006
Smitis



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ViSiToR

Цитата:
Те ключи которые я привё в пример, да. Но я имел в виду, похожие ключи на эти...

Полистай тему немного назад.
http://forum.ru-board.com/topic.cgi?forum=62&topic=6156&start=1180#15
 
А для вынь98 используй 4DOS (я на 98 ставил его даже в качестве дефолтного коммандного процессора, всё хорошо работало, правда, были нюансы...)
 
anvarga

Цитата:
И еще маленький вопросик: Как очистить папку с подкаталогами и файлами, чтобы она осталось пустая?

Предлагаю такой вариант

Код:
 
pushd folder
rmdir /s/q . 2> nul
popd
 

Преимущество такого способа - сама папка залочивается и не удаляется, в отличие от способа удалить полность и создать заново. (Система многозадачная, мало ли какая прога в момент удаления туда полезет. Перестраховка, типа)
 

Всего записей: 3445 | Зарегистр. 09-02-2003 | Отправлено: 15:27 20-08-2006
ViSiToR



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Smitis

Цитата:
А для вынь98 используй 4DOS

 
Я немного не так вырозился - у меня не стоит вин98, мне просто нужно обойти команду for... чтобы батник работал и в вин 98 - ведь как я понимаю, 4DOS это что-то что ставится на вин98?

----------
ViSiToR a.k.a CreatoR
CreatoR это не ник, CreatoR это стиль жизни!

Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 15:54 20-08-2006
Smitis



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ViSiToR
4DOS - это альтернативный коммандный процессор сторонней фирмы (бесплатный). Будет работать и на XP и т.п. (но для хр есть платный 4NT для замены CMD.EXE). Но, естественно требует установки (хотя установка может ограничится простым копированием нужных файлов). Без сторонних средств ограничения COMMAND.COM не обойти.
 
П.С.
Добавил к своему посту грозное предупреждение

Командный процессор имеет весьма ограниченные возможности по обработкzе содержимого текстовых файлов. Все его средства ореентированы в первую очередь на обработку различных системных текстовых файлов (например логов) с чёткой и простой структурой строк. На ПРОИЗВОЛЬНЫХ текстовых файлах, содержащих специальные символы (те же кавычки, например) процессор легко обламается. Могут возникнуть проблемы и с национальными кодовыми таблицами.
И это всё только для линейки NT - NT4, 2000, XP, 2003... (NT4 с ограничениями). Командный процессор для Windows9x/ME не имеет даже этих возможностей.


Всего записей: 3445 | Зарегистр. 09-02-2003 | Отправлено: 20:06 20-08-2006 | Исправлено: Smitis, 20:32 20-08-2006
xitsa



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
GreaseOD
Для работ с текстом средства лучше, чем sed не найти.
И задачи типа "заменить это на это" на нем решаются элементарно.
Точнее сформулируй задачу—подскажу как ее решить.

Всего записей: 103 | Зарегистр. 25-04-2006 | Отправлено: 20:25 20-08-2006
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах
vu1tur (14-11-2006 16:59): http://forum.ru-board.com/topic.cgi?forum=62&topic=9040


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru