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

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

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

vu1tur (04-11-2008 23:07): Задачи на bat-файлах 6  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

Nagual



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Задачи на bat-файлах 5
(часть 1, часть 2, часть 3 , часть 4)
Вопросы, задачи и их решения по работе с командными файлами, а также сопутствующие ссылки.

 
Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!!
 
Также для удаления концевых пробелов пользуйтесь скриптом от Nagual, или VBS-Скрипт-Модулем от ViSiToR.
 
Для перекодирования кирилицы 866<<>>1251 пользуйтесь онлайн сервисом Перекодировщик кириллицы

 
Дополняем шапку: добавляем готовые решения, полезные ссылки.
 
Примечание: Большие куски кода заключайте в тэг [more]  
 
Смежные темы:
В помощь системному администратору » Автоматизация администрирования
Программы » Командная строка, батники\сценарии
 
Полезные ссылки
 
Полезные утилиты
 
Готовые решения и частые вопросы:
  • Встроенный справочник по командам
  • Создание помощи по всем командам консоли 2000 и XP
  • Делаем паузу в командном файле стандартными средствами Windows
  • Альтернативные решения »
  • Работа с текстом, датой, и файлами »
  • Администрирование, автоматизация и сеть »
  • Работа с переменными и параметрами ком. строки »
     
    Описания работы команд и символов участниками темы:
    · setlocal enabledelayedexpansion и переменные окружения
    · символы & и && в командной строке
    · Переменная %0

  • Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 12:28 19-03-2008 | Исправлено: Nagual, 01:02 24-09-2008
    ailman85

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

    Всего записей: 10 | Зарегистр. 18-07-2008 | Отправлено: 14:13 21-07-2008
    01MDM



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

    Код:
     
    @echo off
    attrib +r *%date%*
    del /q *.* 1>nul 2>&1
    attrb -r *%date%*
     

    в названии формат даты должен быть, как при `echo %date%`

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 14:50 21-07-2008
    ailman85

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

    Всего записей: 10 | Зарегистр. 18-07-2008 | Отправлено: 15:07 21-07-2008
    Kilich



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

    Цитата:
    del /q *.* 1>nul 2>&1

    Давно хотел спросить что означает (1),(2), и &1
     
    А лучше прокоментируйте строку я только понял до 1

    Всего записей: 267 | Зарегистр. 18-09-2006 | Отправлено: 17:37 21-07-2008 | Исправлено: Kilich, 17:42 21-07-2008
    KapralBel



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Kilich
    См. Встроенный справочник по командам

    Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 17:43 21-07-2008
    Svjt



    Newbie
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Доброе время суток...  
     
    Может кто-нить помочь с написание батника, в чьи обязанности входит:  
    1 - скачивание с защищённого паролем сайта отпределённого файла с именем fed%1_%2_%2.rtf, где %1 - дата субботы, %2 - месяц, %3 - соответственно год.  
    2 - отправка этого файла на список адресов (примерно 70-80 штук)
     
    Первое - понятно, с помошью wget могно осилить, загвостка лишь в определении даты субботы и расстановка именно так %1_%2_%3... А вот второй момент у меня так и не получился, не получается даже себе из консоли письмо отправить... Ответ примерно таков:
    Blat v2.6.2 w/GSS encryption (build : Feb 25 2007 12:06:19)
    Sending test.txt to zergius@rkmail.ru
    Subject: test_blat
    Login name is zergius@rkmail.ru
    The SMTP server does not require AUTH LOGIN.
    Are you sure server supports AUTH?
    Хотя вроде всё верно вводил при "blat -install"  
     
    Могет кто подсказать приличный материал по теме отправки писем из консоли на русском?

    Всего записей: 17 | Зарегистр. 03-03-2008 | Отправлено: 23:37 21-07-2008
    leecher666

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите
    локальная сеть настроена по dhcp, получает ip, шлюз и днс...
    Цитата:
    chcp 1251 1>nul
    netsh interface ip show address | find /i "шлюз"
    chcp 866 1>nul
    эта команда возвращает строку.
    Как выдрать из этой строки именно часть XXX шлюза: ***.***.XXX.***
    И присвоить переменной для дальнейшей работы

    Всего записей: 2 | Зарегистр. 22-07-2008 | Отправлено: 00:11 22-07-2008 | Исправлено: leecher666, 00:12 22-07-2008
    Tipulatoid



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

    Код:
    @echo off
    chcp 1251 1>nul
    for /f "tokens=3 delims=." %%a in ('netsh interface ip show address | find /i "шлюз"') do set var=%%a
    chcp 866 1>nul
    echo %var%

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 11:27 22-07-2008
    igor_andreev

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

    Цитата:
    загвостка лишь в определении даты субботы

    В планировщик забей запуск батника по субботам, да и голову не ломай. %1 будет сегодняшним числом.

    Цитата:
     и расстановка именно так %1_%2_%3

    В шапке "Работа с текстом, датой, и файлами" и по всем пяти частям этого топика примеров полно.

    Цитата:
    The SMTP server does not require AUTH LOGIN.  
    Are you sure server supports AUTH?  

    smtp-сервер провайдера вбил в -install наверно, а он авторизации не требует?

    Всего записей: 1667 | Зарегистр. 08-12-2004 | Отправлено: 11:39 22-07-2008
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Вопрос к Игорю Андрееву
    есть локальный весомый (~ 20 Мб) бинарный файл с определенной версией
    на сервере лежит файл с более новой версией
    необходимо докачать с помощью wget (curl) файл с сервера так, чтобы версия локального файла сменилась на версию файла с сервера
    вся загвоздка именно в том, что версия файла не обновляется

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 11:50 22-07-2008
    igor_andreev

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

    Цитата:
    Вопрос к Игорю Андрееву

    да тут и кроме меня народу полно
    Бинарник - только перекачивать заново.

    Всего записей: 1667 | Зарегистр. 08-12-2004 | Отправлено: 12:03 22-07-2008 | Исправлено: igor_andreev, 12:04 22-07-2008
    ailman85

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Кто-нибудь может сказать, как сравнить в батнике два числа,одно из которых больше 32 бит, а другое может быть как больше 32 бит, так и меньше???

    Всего записей: 10 | Зарегистр. 18-07-2008 | Отправлено: 12:14 22-07-2008
    MsdLamer

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте мастера. Подскажите пожалуйста как из текстового файла удалить все знаки = (равно), попробовал этот пример:
     
    setlocal enabledelayedexpansion
    for /f "delims=" %%a in (C:\Statistic\TEMP2.TXT) do (
    set string=%%a
    set string=!string:== !
    echo.!string!>> C:\Statistic\TEMP3.TXT)
     
    что-то не получается, получается аж 2 равно..)))
     
     и еще одно подскажите пожалуйста как реализовать следующее.... Имеется текстовый файл следующего содержания:
     
    2 // числа могут быть обсолютно разными но 3 цифры это максимум
    22434234234234 // по любому больше 3-х цифр.
    23423423423423
    24
    09099999999999
    104  
    989898989898
    77787878787878
    67667676767676
     
    можно сделать так чтобы это один большой файл разбить на маленькие:
    Допустим 2.тхт содержит
    2  
    22434234234234
    23423423423423
     
    24.тхт содержит  
    24
    09099999999999
    и.т.д  т.е . чтобы верхний номер был названием файла. Спасибо.

    Всего записей: 53 | Зарегистр. 26-07-2007 | Отправлено: 12:34 22-07-2008
    Tipulatoid



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    MsdLamer
    На второй вопрос:

    Код:
    @echo off
    setlocal enabledelayedexpansion
    for /f %%a in (file.txt) do (
       set number=%%a
       set forth_symbol=!number:~3,1!
       if not defined forth_symbol set small_number=!number!
       echo !number!>>!small_number!.txt
    )

    На первый - не знаю как без сторонних утилит

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 13:52 22-07-2008
    igor_andreev

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

    Цитата:
    На первый - не знаю как без сторонних утилит

    Разве что так

    Код:

    for /f "tokens=1-26 delims==" %%a in (TEMP2.TXT) do call :replace %%a %%b %%c %%d %%e %%f %%g %%h %%i %%j %%k %%l %%m %%n %%o %%p %%q %%r %%s %%t %%u %%v %%w %%x %%y %%z
    goto :eof
    :replace
    echo %*>>TEMP3.TXT

    Сработает ессно, если знаков равно в каждой строке меньше 26 будет

    Всего записей: 1667 | Зарегистр. 08-12-2004 | Отправлено: 14:23 22-07-2008 | Исправлено: igor_andreev, 14:27 22-07-2008
    Svjt



    Newbie
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Разобрался... Спасибо Народу и Гуглу... Если кому надо выкладываю:

    Код:
     
    rem Сначала берём дату сегодня
    for /f %%d in ('date /t') do set dt=%%d
    echo %dt%
     
    rem Потом меняем все "-" на "_"
    for /f "delims=. tokens=1,2,3" %%i in ("%dt%") do set ndt=%%i_%%j_%%k
     
     
    set DIR=папка назначения файла
    echo %ndt%
     
    own
     
    wget --http-user=name --http-password=pwd --directory-prefix=%DIR%\ http://линк до конечного файла...
    rem Проверка, скачалось ли
    if exist %DIR%\*.* goto mail
    goto down
     
    :mail
    rem Ну и собственно рассылка каждому подписчику в отдельности из файла adress.txt (адреса пишете в столбик по одному)
    for /f %%I in (adress.txt) Do blat body.txt -to %%I -subject "тема письма" -attach %DIR%\*.* -ti 30 -try 3 -charset windows-1251
     
    rem Удаление файла, за ненадобностью...
    del %DIR%\*.*

     
    Два косяка...  
    1 - Если Тему писать на русском, то приходят крякозябры... Могет кто подскажет в чём беда?
    2 - На яндекс иногда письма приходят оборванными, т.е. часть файла body.txt в теле и без вложения... На майле пару раз при тестировании пришёл только кусок отправляемого файла (RTF-документ), могет кто сталкивался, в чём беда могет быть?

    Всего записей: 17 | Зарегистр. 03-03-2008 | Отправлено: 14:54 22-07-2008 | Исправлено: Svjt, 14:57 22-07-2008
    Sabiko

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Я окончательно запуталась, поэтому приходятся просить помощи.
     
    Задачи две:
    1. Есть папка с кучей вложенных подкатологов, имена подкаталогов всегда уникальны. В подкаталогах переодически попадается файл a.txt — нужно дать ему уникальное название (включающее имя подкатолога, в котором он находится) и переместить в корень.
     
    У меня, возможно, что-нибудь получилось бы, если бы можно было брать взятие подстрок с конца, ведь точное кол-во подстрок (если брать \ как разделитель) неизвестно! Но в документации нигде про подобное действие tokens не говорится..
     
    Ниже вариант из разряда "фигачим":
    Код:
     
    for /f "usebackq tokens=1* delims=^" %%i in (`dir /b /s /a:d`) do ren "%%i^%%j/a.txt" "%%j.txt"

    Он бы даже заработал, если бы можно было в %j заменить все \ на _, например, но если, для переменных среды я знаю, как это сделать, то тут — нет.
     
    2. Вырезать из файлов первые n строк (всегда одни и те же).

    Всего записей: 3 | Зарегистр. 09-08-2005 | Отправлено: 18:44 22-07-2008
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Sabiko
     
    Можно так, жарко шевелить мозгами:

    Код:
     
    @echo off
    for /f "tokens=*" %%i in ('dir /b /s Folder\a.txt') do call:move "%%~dpi"
    goto:eof
     
    :move
    set curpath=%~1
    set curpath=%curpath:\=,%
    set curpath=%curpath: =_%
     
    for %%i in (%curpath%) do set folder=%%i
    set folder=%folder:_= %
     
    move "%~1a.txt" "Folder\a_%folder%.txt"
     

     
     
    Добавлено:
    Если в пути к файлу есть "," , то ее надо обработать раньше пробела. А "_" лучше вообще не исползовать, т.е вместо него применить какой-нибудь недопустимый знак (например "?")

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 19:35 22-07-2008 | Исправлено: 01MDM, 19:38 22-07-2008
    igor_andreev

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

    Цитата:
    1. Есть папка с кучей вложенных подкатологов, имена подкаталогов всегда уникальны. В подкаталогах переодически попадается файл a.txt — нужно дать ему уникальное название (включающее имя подкатолога, в котором он находится) и переместить в корень.


    Код:

    @echo off
    pushd d:\folder
    for /r /d %%a in (*) do if exist "%%a\a.txt" move "%%a\a.txt" "a_%%~nxa.txt"


    Цитата:
    2. Вырезать из файлов первые n строк (всегда одни и те же).

    Куда вырезать? Удалить из исходного файла или наоборот оставить, или записать в другой файл?

    Всего записей: 1667 | Зарегистр. 08-12-2004 | Отправлено: 00:09 23-07-2008
    lamener

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем Доброго времени суток !!
    Вот есть задача !! Самому ее реализовать не получается !
     

    Цитата:
     
    Существует каталог с кучей подкаталогов с файлами имена всегда разные.  
    Переместить все подкаталоги с файлами из указанного каталога в назначенный каталог, и в каждом из перемещенных подкаталогов создать текстовый документ (имя документа 9.txt), содержание документа - "имя подкаталога"
     

    Может кто подскажет ?

    Всего записей: 25 | Зарегистр. 23-07-2008 | Отправлено: 10:16 23-07-2008 | Исправлено: lamener, 10:27 23-07-2008
       

    Страницы: 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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 5
    vu1tur (04-11-2008 23:07): Задачи на bat-файлах 6


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

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.Board
    © Ru.Board 2000-2020

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru