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

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

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

vu1tur (26-05-2009 11:39): часть 7 — http://forum.ru-board.com/topic.cgi?forum=62&topic=17154#1  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

vu1tur



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

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

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





    http://forum.ru-board.com/topic.cgi?forum=62&topic=17154

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 23:07 04-11-2008 | Исправлено: vu1tur, 11:38 26-05-2009
    king_stiven

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

    Код:
    for %%i in (file.txt) do if %%~zi gtr 10 (echo big) ELSE echo small


    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 00:35 24-11-2008
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    zzxx1488
    для if есть операторы LSS - меньше, GTR - больше.  
     

    Всего записей: 4409 | Зарегистр. 03-05-2006 | Отправлено: 00:39 24-11-2008
    LRick

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте.
    У меня проблема с bat-файлом, выполняющим команду на ftp сервере. Исполняется команда SITE REQ с именем файла в качестве параметра. Проблемы есть в том случае, если имя содержит пробелы.

    Код:
    @echo off
    set target=filename with spaces
    echo OPEN someftp.ru> 1.txt
    echo quote SITE REQ "%target%">> 1.txt
    echo QUIT>> 1.txt
    ftp -s:1.txt -A

    В файл 1.txt пишется команда quote SITE REQ "filename with spaces"
    Однако на ftp сервер приходит команда без кавычек: SITE REQ filename with spaces
    Соответственно, для выполнения команды передаётся только начало имени до пробела.
    Что же делать?
    Заранее спасибо за ответы

    Всего записей: 3 | Зарегистр. 26-08-2008 | Отправлено: 01:35 24-11-2008
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите в такой проблеме:
    Сделал батник копирования Photoshop на диск B: (для WinPE), но при копированиии выяснилось, что копируется только часть файлов, то есть из 90 Мб на диске B: оказывается только 50-75 Мб, всегда по разному. Выяснил причину - недостаточно места на диске B:, на самом деле свободно ещё 10 Мб, даже если скопировать все 90 Мб. Если копировать вручную переносом папки - проблема такая же. Решение - копировать по частям. Разделил обьём на 3 чсти и сделал 3 батника, которые выполняются утилиткой installs.exe, но как выяснилось, и она тоже иногда не все файлы копирует, при чём запускает все 3 батника одновременно.
    В справке посмотрел батник типа этого:

    Цитата:
    @echo off
    rem COPYIT.BAT копирует все файлы во всех подкаталогах
    rem исходного диска или каталога (%1) на другой диск
     
    rem или в другой каталог (%2)
     
    CHCP 1251
     
    xcopy %1 %2  /s /e /h /y
     
    if errorlevel 4 goto lowmemory
    if errorlevel 2 goto abort
    if errorlevel 0 goto exit
     
    :lowmemory
    echo Недостаточно памяти для копирования файлов, задан недопустимый
    echo диск или ошибка в синтаксисе командной строки.
    pause
    goto exit
     
    :abort
    echo Нажата комбинация CTRL+C для остановки копирования.
    pause
    goto exit
     
    :exit

    в оригинал добавил "CHCP 1251", ключи " /h /y", "pause" и убрал вопросительные знаки. Далее сделал батник с таким содержанием
    Цитата:
    copyit "%SYS%\Graphics\Adobe Photoshop CS3" "B:\Adobe Photoshop CS3\"
    По крайней мере в нём за счёт паузы я увидел сообщение "Недостаточно места на диске", хотя на диске B было 60 Мб свободно. Как от этого избавится?

    Всего записей: 4409 | Зарегистр. 03-05-2006 | Отправлено: 02:59 24-11-2008
    snu

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

    Всего записей: 14 | Зарегистр. 27-10-2005 | Отправлено: 04:38 24-11-2008
    OLEHbKA

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте, помогите создать bat файл для следующей задачи:
    Эффективная архивация изменений в исходных данных.
    Т.е. эффективный метод доархивирования данных посредством добавления к архиву только измененной части исходных данных, используя существующие программные средства..
    буду очень благодарна..

    Всего записей: 7 | Зарегистр. 24-11-2008 | Отправлено: 10:45 24-11-2008
    Igor_V_Mitichev

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
     
    В общем, сейчас на работе зашел я туда проводником. В GUI действительно показываются другие буквы: 2x2-Roc&#235; On.mp3. Но команда dir эту самую "ё" почему-то выводит как "е".
     
    Получается что это косяк консоли что-ли? То есть мне в скриптах уже этот файл вообще нельзя обработать?
     
    Дело в том, что у меня тут подобных файлов, которые dir выдала, а скрипт потом не смог найти, порядка 300 штук. И дело как правило в неразрешенных символах в именах файлов (каталогов).  
     
    Например:
     
    C:\>dir /b "d:\share\Общая\СГИП\Общая\Иванова\Задания\Зад. на вып. инж.геолог.-П
    одъездная дорога-пер.Московский.doc"
    File Not Found
     
    C:\>dir /b "d:\share\Общая\СГИП\Общая\Иванова\Задания\*.Московский.doc"
    Зад. на вып. инж.геолог.-Подъездная дорога-пер.Московский.doc
    Зад. на вып. инж.топогр. работ-Подъездная дорога-пер.Московский.doc
     
    Или:
     
    C:\>dir /b "d:\share\Общая\ТО\Ильченко\ИНТЕРАКТИВНАЯ КАРТА БРЯНСКА - Подробная к
    арта Брянска с домами + интегрированный каталог компаний.htm"
    File Not Found
     
    C:\>dir /b "d:\share\Общая\ТО\Ильченко\*компаний.htm"
    ИНТЕРАКТИВНАЯ КАРТА БРЯНСКА - Подробная карта Брянска с домами + интегрированный
     каталог компаний.htm
     
    или (здесь немножко другой вариант)
     
    C:\>dir /b d:\share\Общая\ТО\Ильченко\ПВХ Профили <ЭКСПРОФ> - Продукция и услуги
     - Сибирская система профилей для из ПВХ для изготовления окон, дверей, витражей
     и входных групп.htm
     
    The system cannot find the file specified.
     
    C:\>dir /b d:\share\Общая\ТО\Ильченко\*групп.htm
    ПВХ Профили <ЭКСПРОФ> - Продукция и услуги - Сибирская система профилей для из П
    ВХ для изготовления окон, дверей, витражей и входных групп.htm
     
     
    Как такие конфликты разруливать? На сколько я понимаю, заставить команду dir выдавать имена файлов в формате 8.3 (с ключами /s и /b) нереально... Фиг знает чего делать...

    Всего записей: 32 | Зарегистр. 26-07-2008 | Отправлено: 12:13 24-11-2008
    lanselotideo1111



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Товарищи помогите решить такую задачку.
     
    Есть несколько папок вида в каталоге d:\temp:
    19-11-08 00
    19-11-08 01
    19-11-08 02
    .................
    19-11-08 23
    20-11-08 00
    20-11-08 01
    20-11-08 02
    .................
    20-11-08 23
    .................
    30-11-08 00
    30-11-08 01
    30-11-08 02
    .................
    30-11-08 23
    Все папки содержат файлы.
     
    Необходимо скопировать папки со всеми файлами в каталог, например c:\temp, с заданым условием:
    копировать нужно только каталоги за вчерашний день.  
     
     
     
     
     
     

    Всего записей: 33 | Зарегистр. 04-10-2006 | Отправлено: 12:46 24-11-2008
    NIKZZZZ



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

    Цитата:
    На сколько я понимаю, заставить команду dir выдавать имена файлов в формате 8.3 (с ключами /s и /b) нереально...


    Код:
    FOR /F "usebackq delims==" %%i IN (`dir /s /b e:\`) DO @echo %%~sdpnxi

     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 14:25 24-11-2008
    dex_2005



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Доброе время суток, Господа!  
    Требуется ваша помощь. Нужен батник чтоб контролировал соединение в интернетом, идея такова!  
    значит пингуем IP какого нить интернет сервиса например того же ya.ru если пинг присутствует записываем дату и время + строку Интернет есть =)(надо чтоб это действие писалось в лог файл всего лишь один раз, а если инет вдруг пропадет тоже действие запись в лог + строка Инет отсутствует (надо чтоб и это сообщение записалось один раз)и все сначала! =)

    Всего записей: 49 | Зарегистр. 07-03-2008 | Отправлено: 15:28 24-11-2008 | Исправлено: dex_2005, 15:30 24-11-2008
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    dex_2005
    Ответил в теме "Командная строка, батники, сценарии (bat, cmd) 2"
     
     
    Добавлено:
    Igor_V_Mitichev
    Попробуй запустить команду "chcp 1251" до запуска "dir"-a.

    ----------
    "В интернете есть все, но не всегда"

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 16:28 24-11-2008
    Igor_V_Mitichev

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

    Цитата:
    Попробуй запустить команду "chcp 1251" до запуска "dir"-a

     
    Ты знаешь... действительно, ситуация изменилась кардинально

    Всего записей: 32 | Зарегистр. 26-07-2008 | Отправлено: 17:19 24-11-2008
    N1ke

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    есть прога, выдаёт при запуске разные циферкобуковки. Грубо говоря получаем на выходе  
     
    1111
     
    нужно получить  
     
    блаблабла=1111
     
    можно это сделать без перегонов вывода во временный файл?

    Всего записей: 266 | Зарегистр. 06-05-2006 | Отправлено: 18:13 24-11-2008
    mail1ra

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день!
     
    Подскажите пожалуйста как сделать ввод одного символа, без нажатия клавишы Enter
     
    SET /P input = Введите значение
     
    После ввода значения в данной команде необходимо нажимать Enter. Как по другому можно организовать ввод значение, при котором не нужно нажимать Enter
     
    Спасибо
     

    Всего записей: 1 | Зарегистр. 24-11-2008 | Отправлено: 18:46 24-11-2008
    Elroir



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

    Код:
     
    @echo off
    for /f "tokens=*" %%a in ('proga.exe') do set "blablabla=%%a"
     

     
    mail1ra
    Встроенными средствами командной строки - нельзя.

    ----------
    "В интернете есть все, но не всегда"

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 20:41 24-11-2008
    batniki



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите реализовать такую задачу, делаю для рескью диска винды, сценарий-связку updater/shell, fakelicense - для защиты дистрибутива нужен след. код (можно частями,  буду очень благодарен за лаконичность кода и вашу помощь в написании):
     
    Есть .txt, в нем список, на каждой строке дата релиза bios'а (пример строки: 30060126000000.000000+000)
     
      1.    нужно найти в файле строчку соответствующую %bios%

    Код:
    for /f "tokens=*" %%i in ('wmic bios get releasedate') do set bios=%%i

     
      2.     если такой строчки нет, то с помощью reg брать значение параметра InstallDate в ветке KEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion и переводить в десятичный формат, полученное число прибавить к 01.01.1970 = число даты установки ОС.
     
      3.    Полученную дату нужно проверить с текущей и если промежуток дней (предопределенная переменная, допустим set "day=28") уже прошел с момента установки ОС, сделать конструкцию типа (exit) else (goto ruboard)
     
    Вернусь к условию пункта  №2, если строчка в файле все же есть, сделать, скажем, goto blabla
     
    Для меня задачка гемморойная, но думаю, для отцов батников не составит труда, извиняйте если что, то не так сформулировал

    Всего записей: 50 | Зарегистр. 11-02-2008 | Отправлено: 00:31 25-11-2008
    01MDM



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

    Цитата:
    2.     если такой строчки нет, то с помощью reg брать значение параметра InstallDate в ветке KEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion и переводить в десятичный формат, полученное число прибавить к 01.01.1970 = число даты установки ОС.

    А обязателен такой геморой с прибавлением секунд?
    Не проще взять из:

    Код:
     
    netsh diag show os /v | findstr /i "installdate"
     

    Или с учетом локализации из:

    Код:
     
    systeminfo | findstr /i "Дата установки:"
     

     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 05:05 25-11-2008
    OLEHbKA

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

    Всего записей: 7 | Зарегистр. 24-11-2008 | Отправлено: 10:39 25-11-2008
    dex_2005



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

    Цитата:
    dex_2005
    Ответил в теме "Командная строка, батники, сценарии (bat, cmd) 2"

    Спасибо большое ща проверю =)
     
    Добавлено:

    Цитата:
    Доброе время суток, Господа!  
    Требуется ваша помощь. Нужен батник чтоб контролировал соединение в интернетом, идея такова!  
    значит пингуем IP какого нить интернет сервиса например того же ya.ru если пинг присутствует записываем дату и время + строку Интернет есть =)(надо чтоб это действие писалось в лог файл всего лишь один раз, а если инет вдруг пропадет тоже действие запись в лог + строка Инет отсутствует (надо чтоб и это сообщение записалось один раз)и все сначала! =)

    Благодаря Elroir, данная задача решена! Батч файл полностью функционален под XP, под другим пока еще не тестил!

    Код:
    @echo off
    setlocal
    :loop
    ping ya.ru | find "TTL=">nul
    if errorlevel 1 (
    if not defined noConnection (
    set "noConnection=true"
    echo %date% %time% Disconnected>>log.txt
    )
    ) else (
    if defined noConnection (
    set "noConnection="
    echo %date% %time% Connected>>log.txt
    )
    )
    goto loop  

     
     
     
    Добавлено:

    Цитата:
    Благодаря Elroir, данная задача решена! Батч файл полностью функционален под XP, под другим пока еще не тестил!
     

    Протестил под Win2K SP4 работает пекрасно!

    Всего записей: 49 | Зарегистр. 07-03-2008 | Отправлено: 12:01 25-11-2008
    Badim

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Можно ли узнать время последнего доступа к файлу?
     
    пример:
    Set f_stat=%f_Time:~0,5%
    получим время последней модификации
    а вот, чтобы вермя последнего доступа?

    Всего записей: 75 | Зарегистр. 10-09-2004 | Отправлено: 14:47 25-11-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 100

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 6
    vu1tur (26-05-2009 11:39): часть 7 — http://forum.ru-board.com/topic.cgi?forum=62&topic=17154#1


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru