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

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

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

vu1tur (27-04-2007 11:55): продолжаем в теме «Задачи на bat-файлах 3»  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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-файлах (часть 1)
Вопросы, задачи и их решения по работе с командными файлами, а также сопутствующие ссылки.

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 16:59 14-11-2006 | Исправлено: Elroir, 04:30 26-04-2007
    Kirillhome



    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    SGG
    IMHO, должно помочь простое убирание пробела перед >, т.е.

    Код:
     for /F "tokens=1,2,3,4 delims=_" %%i in (text.txt) do @echo %%i%%j%%k%%l> out.txt  

    Всего записей: 426 | Зарегистр. 23-11-2004 | Отправлено: 03:54 22-01-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SGG
    Я не проверял все варианты расположения символов, так что попробуй погонять тесты.

    Код:
     
    @echo off
    setlocal enabledelayedexpansion
    set count=1
    for /f "tokens=1-4 delims=_ " %%a in (text.txt) do (
    if !count!==2 (set fpart=%%a%%b%%c%%d) else (set code=%%a%%b%%c%%d)
    set /a count=!count!+1
    )
    if not defined fpart (echo %code%>out.txt) else (echo %fpart%%code%>out.txt)
     

    При копировании с форума, удали пробелы в конце строк кода.
    P.S Спасибо за "добавки" к USDownloader

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 03:57 22-01-2007
    SGG



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

    Цитата:
    должно помочь простое убирание пробела перед >

    таки да - ты прав! спасибо, учту такой момент
     
    Elroir

    Цитата:
    попробуй погонять тесты
    погонял - ещё как работает! супер!

    Цитата:
    Спасибо за "добавки" к USDownloader  

    Пожалуйста.
    [offtop]А вот с этой доработкой распознавалка будет работать еще лучше!!! Большое спасибо!
    Так что скоро, думаю, не за горами, новый сборничек будет. Там и база побольше. /offtop]

    Всего записей: 71 | Зарегистр. 23-12-2005 | Отправлено: 04:57 22-01-2007 | Исправлено: SGG, 05:00 22-01-2007
    Maza Faka



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Нужно вписать в текстовый файл слово "System", пропустив две строки...
    Вот так не получается : For /F "skip=2" %%i in (test.txt) do echo "System" >> %%i
    Что я делаю не так?

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 07:17 22-01-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maza Faka
    В пустой файл вписать две пустые строки, а на третьей написать "System"?

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 07:23 22-01-2007
    royt

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

    yurkesha
    Цитата:
    созданный скрипт вместе с нужными утилитами помещается в SFX-архив...

    Просто хочется по-максимуму быть независимым от сторонних программ, когда это возможно. Поэтому и вопрос.
     
    Например, некоторые консольные проги не будут запускаться без предварительной инсталляции (даже если ее довольно легко "выполнить" самому, импортировав данные в реестр - все равно это уже дополнительный геморрой). Порой им еще нужны всякие дополнительные .NET (или просто .dll-ки типа msvcp60 - которые не являются обязательными компонентами системы и имеются почти на каждой машине, но не всегда).
    Кроме того, флэшка, которая всегда с собой - тоже не резиновая.

    Всего записей: 319 | Зарегистр. 18-08-2004 | Отправлено: 08:03 22-01-2007 | Исправлено: royt, 08:12 22-01-2007
    Maza Faka



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

    Цитата:
    В пустой файл вписать две пустые строки, а на третьей написать "System"?

     
    Нет, файл не пустой, в нём уже есть две строки, надо пропустить их и вписать "System"
     
     
    Добавлено:
    Как запретить пользователю закрывать окно командной строки, пока выполняется длинный сценарий (около 10 сек), скрывать его нельзя, так как пользователь будет запускать батник снова и снова...Короче нужно оформить консольное окно так, что бы пользователь понял, что нужно подождать и не мог закрыть его...

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 08:40 22-01-2007
    Tipulatoid



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maza Faka
    Я на 27-ой странице задавал похожий вопрос. Elroir привел пример кода. Его надо чуток под свою задачу адаптировать.

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 08:57 22-01-2007
    Elroir



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

    Код:
     
    @echo off
    setlocal enabledelayedexpansion
    set count=1
    for /f "tokens=*" %%a in (test.txt) do (
    if !count!==3 echo "System">>out.txt
    echo %%a>>out.txt
    set /a count=!count!+1
    )
     

     
    Tipulatoid

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 09:04 22-01-2007
    Tipulatoid



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Впрочем, сам попробую. Так должно работать:
     

    Цитата:
    @echo off  
    setlocal enabledelayedexpansion  
     
    set thirdline=System
    set line=3
     
    del /q tmp_file 2>nul  
    set counter=1  
    for /f "tokens=*" %%a in (test.txt) do (  
    if !counter!==!line! (echo %thirdline%>>tmp_file) else (  
    echo %%a>>tmp_file)  
    set /a counter=!counter!+1  
    )  
    del /q test.txt 2>nul  
    ren tmp_file test.txt


    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 09:10 22-01-2007 | Исправлено: Tipulatoid, 09:32 22-01-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Tipulatoid
    Все так, но там надо было заменить строчку, а здесь вставить. Т.е. в коде, который ты привел, надо убрать else - заменить

    Код:
    else (echo %%a>>tmp_file)
    на
    Код:
    echo %%a>>tmp_file

    и написать это на строчку ниже if.
     
    Добавлено:
    Maza Faka

    Цитата:
    Короче нужно оформить консольное окно так, что бы пользователь понял, что нужно подождать

    Может так:

    Код:
    title ! ! ! ! ! ! ! ! ! !   НЕ ЗАКРЫВАТЬ   ! ! ! ! ! ! ! ! ! !


    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 09:22 22-01-2007 | Исправлено: Elroir, 09:24 22-01-2007
    Tipulatoid



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
    Да, точно, не до конца понял вопрос Maza Faka
     

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 09:33 22-01-2007
    Maza Faka



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

    Цитата:
    Может так:
    Код:
    title ! ! ! ! ! ! ! ! ! !   НЕ ЗАКРЫВАТЬ   ! ! ! ! ! ! ! ! ! !
     

    Так и делаю, но надо, что бы пользователь не смог закрыть консольное окно
     
     
     
    Добавлено:
    Elroir

    Цитата:
    @echo off  
    setlocal enabledelayedexpansion  
    set count=1  
    for /f "tokens=*" %%a in (test.txt) do (  
    if !count!==3 echo "System">>out.txt  
    echo %%a>>out.txt  
    set /a count=!count!+1 )

     
    Если не сложно прокомментируй подробнее вышеуказанный сценарий...В особенности вот это:
    Код:
    setlocal enabledelayedexpansion
    , что означает эта команда, а то в справочниках не смог найти...

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 10:16 22-01-2007
    Elroir



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

    Цитата:
    setlocal enabledelayedexpansion  
    , что означает эта команда, а то в справочниках не смог найти...

    Я отвечал на этот вопрос на 28-й странице:

    Цитата:
    В обычном случае, чтобы узнать значение переменной окружения, надо воспользоваться конструкцией %переменная%. Однако, если значение переменной меняется внутри цикла и читается там же, то для корректной работы батника, нужно использовать команду setlocal enabledelayedexpansion и вместо символа "%", использовать символ "!". Иначе, значение переменной в цикле будет всегда одним и тем же - таким, каким было до входа в цикл.

     
     
    Добавлено:
    А сам код выполняет следующие действия:
    1. Устанавливает переменную count равной 1.
    2. Для каждой строчки в тексте:
       - проверяет равен ли номер строчки 3, если да - пишет в файл строчку "System".
       - пишет считанную строчку в файл  
       - увеличивает переменную count на 1.

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 11:13 22-01-2007
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    yurkesha
    Спасибо
    Используя этот скрипт

    Цитата:
    FOR /F "usebackq tokens=1 eol= skip=1 delims= " %%a IN (`help^|findstr /B /V /C:" "`) DO help %%a >>%%a.txt  

    получил файлы, которые перекодировал в кодировку Windows, и сделал удобный HTML-справочник. Вот ссылка: http://www.rapidshare.ru/151926

    Всего записей: 4182 | Зарегистр. 03-05-2006 | Отправлено: 10:05 23-01-2007
    ViSiToR



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

    Цитата:
    В обычном случае, чтобы узнать значение переменной окружения, надо воспользоваться конструкцией %переменная%. Однако, если значение переменной меняется внутри цикла и читается там же, то для корректной работы батника, нужно использовать команду setlocal enabledelayedexpansion и вместо символа "%", использовать символ "!". Иначе, значение переменной в цикле будет всегда одним и тем же - таким, каким было до входа в цикл.

    Имхо, нужно в шапку поместить новый раздел, что-то вроде “Пользовательские описания комманд” (ПОК) - и помещать туда ссылки на такие описания как ты привёл для этой команды.
     
     
    AZJIO

    Цитата:
    Вот ссылка:

    Жду 30 сек., и вижу это:
     

    Цитата:
    Время действия ссылки истекло, либо она была выдана не вам. Кликните сюда для получения новой ссылки

     
    Можешь перезалить? например на http://www.sendspace.com/

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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 10:40 23-01-2007
    JekaRus

    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Как с помощью Bat файла удалить все файлы в папке %systemroot%\Temp на удаленной машине если имя папки с системой неизвестно, то есть оно каждый раз разное, либо WINDOWS, либо WINNT или еще какое нибудь. Шара ADMIN$ тоже отключена.

    Всего записей: 1025 | Зарегистр. 10-08-2005 | Отправлено: 14:12 23-01-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR и All
    Добавил в шапку блок Описания работы команд участниками темы.
    Просьба - пройдитесь по топику и поищите сообщения, которые можно было-бы добавить в этот блок.
     
     

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 14:57 23-01-2007
    Tipulatoid



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

    Код:
    SAGA 61,00 231,11  
    PlayGirl 78,09 356,05  
    Уфа -8,84 -119,77  
    BSC КФХ Славинка 43,23 339,95
    Raul Gonsalez 58,07 344,30  
    Last champion 60,43 354,80  

     
    В конце строк (если в них меньше 5 слов или чисел) имеются пробелы
     
    Можно ли его привести в более удобный для чтения человеком вид. Например такой:

    Код:
    SAGA..........................61,00.....231,11  
    PlayGirl.......................78,09.....356,05  
    Уфа............................-8,84......-119,77  
    BSC КФХ Славинка.....43,23.....339,95
    Raul Gonsalez..............58,07.....344,30  
    Last champion..............60,43.....354,80  

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 15:56 23-01-2007
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
    Вот новая ссылка... проверил.
    http://www.sendspace.com/file/w3ocs7
    rapidshare.de почему-то у меня перестала работать, а rapidshare.ru я проверил, закачка была.
     
    Есть ли способ включить кодировку? CHCP [nnn] - ? Иначе приходится для создания папок использовать перекодирование в DOS. Попробовал 866, ничего не получилось.

    Цитата:
    xcopy "%UserProfile%\€§Ўа --®Ґ" "%backup%\Documents and Settings\Administrator\€§Ўа --®Ґ" /E /H /K
    xcopy "%UserProfile%\ѓ« ў-®Ґ ¬Ґ-о" "%backup%\Documents and Settings\Administrator\ѓ« ў-®Ґ ¬Ґ-о" /E /H /K


    Всего записей: 4182 | Зарегистр. 03-05-2006 | Отправлено: 22:15 23-01-2007
       

    Страницы: 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-файлах 2
    vu1tur (27-04-2007 11:55): продолжаем в теме «Задачи на bat-файлах 3»


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru