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

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

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

vu1tur (04-09-2010 17:46): http://forum.ru-board.com/topic.cgi?forum=62&topic=21297  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199

   

vu1tur



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

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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 12:40 25-01-2010 | Исправлено: bomzzz, 13:37 20-08-2010
    AkeHayc

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ребята подкскажите пожалуйста как добавить контакты в Active Directory.
     
    Вот коды батника:
     
    set contacts_list=c.csv
    set OU=OU=adressbook,DC=COMPANY,DC=local
    ::
    for /f "eol=# tokens=1-13 delims=;" %%a in (%contacts_list%) do (
    dsadd contact CN=%%a,%ou%" -fn %%b" -ln "%%c" -display "%%d" -title "%%e" -tel "%%f" -mobile "%%g" -email "%%h" -office "%%i" -fax "%%j" -hometel "%%k")
     
    При выполнении этого батника у меня например вместо почтового ящика ставиться номер телефона. Подскажите правильное решение.
     

    Всего записей: 519 | Зарегистр. 24-02-2009 | Отправлено: 10:32 09-06-2010 | Исправлено: AkeHayc, 10:33 09-06-2010
    mugil_cephalus

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

    Цитата:
    dsadd contact CN=%%a,%ou%" -fn %%b" -ln "%%c"  

    может, так
    dsadd contact CN=%%a,%ou% -fn "%%b" -ln "%%c"

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 10:47 09-06-2010
    dvymp4

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите пожалуйста, как можно проверить наличие файлов в каталоге?
    использование if exist dir\*.* не приносит желаемого результата - в случае пустого каталога результат все равно положительный.
     
    трудность в том, что файлы могут быть с любой маской (с расширением и без, с произвольной длиной имени), обработка вывода команды "DIR" занимает очень много времени, т.к. каталогов более 1000 и во многих порядка 20000 файлов.
     
    Спасибо.

    Всего записей: 7 | Зарегистр. 22-12-2005 | Отправлено: 12:49 09-06-2010
    Mark_Titov



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425 Подскажи плиз как убрать вывод на экран ошибки при не обнаружении файла указанного в этом параметре -

    Код:
    set /p site=<%systemdrive%\IP-AN-80.txt && goto :ping-ok

    P.s
    2>nul и  1>nul 2>&1 не помогают.
    Может я что не так делаю?
     
    Благодарю...

    Всего записей: 387 | Зарегистр. 12-04-2010 | Отправлено: 12:50 09-06-2010
    AkeHayc

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Вот что у меня вылазит:
     
    C:\>(dsadd contact CN=????????,OU=adressbook,DC=COMPANY,DC=LOCAL" -fn ,??????
    ? ??????????" -ln ",???????? ??????? ??????????" -display ",???.????????" -title
     ",258-44-44    266-44-44    ??. " -tel ",8 777 370 76 06" -mobile "," -email ",
    21231" -office ",258-42-59" -fax ",227 89 91" -hometel "%k" )
    dsadd failed:Value for `Target object for this command' has incorrect format.
    type dsadd /? for help.
    C:\>(dsadd contact CN=???????????,OU=adressbook,DC=ASIAINVEST,DC=local" -fn ,???
    ???? ??????????" -ln ",??????????? ??????? ??????????" -display ",???.???????? A
    LA" -title ",258-44-44    266-44-44    ??. " -tel ",8 777 278 04 19" -mobile ","
     -email ",21135" -office ",258-42-59" -fax ",238 05 47" -hometel "%k" )
    dsadd failed:Value for `Target object for this command' has incorrect format.

    Всего записей: 519 | Зарегистр. 24-02-2009 | Отправлено: 13:00 09-06-2010
    wolf0425



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

    Цитата:
    Подскажите пожалуйста, как можно проверить наличие файлов в каталоге?
    использование if exist dir\*.* не приносит желаемого результата - в случае пустого каталога результат все равно положительный.  

    dir /b dir\* 2>nul |find /v "" >nul && echo files or dirs exists
    в ключи дира можно дописать выборку конкретно файлов, а не директорий. или наоборот...  
     

    Цитата:
    трудность в том, что файлы могут быть с любой маской (с расширением и без, с произвольной длиной имени), обработка вывода команды "DIR" занимает очень много времени, т.к. каталогов более 1000 и во многих порядка 20000 файлов.  
    в в каких многих? или конкретно в каталоге dir\ столько файлов ?
     
    Добавлено:
    AkeHayc

    Цитата:
    Вот что у меня вылазит:
    C:\>(dsadd contact CN=????????,

    ну, и в какой кодировке у тебя c.csv ?
    ты батник то на ту же кодировку переключил?

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 13:08 09-06-2010 | Исправлено: wolf0425, 13:17 09-06-2010
    AkeHayc

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    DOS, если в Win кодировке бабахнуть в AD получаются крякозябры, в DOS все пучком, проверил.
     
    Добавлено:
    wolf0425
    В принципе простой батник работает с тремя значениями, но если добавить другие, получается каша.

    Всего записей: 519 | Зарегистр. 24-02-2009 | Отправлено: 13:16 09-06-2010
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    dvymp4
    Вместо if exist используй for. Внутри for выполняй операции в случае наличия файлов в каталоге, в конце fora - goto на выход из цикла.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 13:20 09-06-2010
    wolf0425



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

    Цитата:
    если в Win кодировке бабахнуть в AD получаются крякозябры, в DOS все пучком, проверил.
    почему-то мне кажется что если и файлик и батник во время выполнения оба будут в вин - то тоже всё будет пучком. но если оно как-то работает с двумя параметрами - дело действительно не  в кодировке.
     
    А где у тебя ошибка - не видно же ни черта, откуда у тебя ???? лезут если файлик тоже в ДОС? ты бы фонт консоли на люсиду переключил, что-ли, вдруг что увидим.  
     
    Добавлено:
    у тебя там с кавычками какие-то странности, дай пример строчки из файла, на которую ругается.
     
    и я бы писал как-то так:
    dsadd contact "CN=%%~a,%ou%" -fn "%%~b" -ln "%%~c"  

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 13:24 09-06-2010 | Исправлено: wolf0425, 13:34 09-06-2010
    dvymp4

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

    Цитата:
    dir /b dir\* 2>nul |find /v "" >nul && echo files or dirs exists
    в ключи дира можно дописать выборку конкретно файлов, а не директорий. или наоборот...  
     
    в в каких многих? или конкретно в каталоге dir\ столько файлов ?

     
    Много каталогов DIR, т.е. DIR0001, DIR0002 .... DIR1000.
    Они перебираются в цикле. В каждом может быть от 0 до "очень много файлов". Я сечас посмотрел в самом большом более 50000. Надо найти пустые. Обработку DIR я делать пробобовал, но на больших каталогах это занимает очень много времени. Хочу оптимизировать процесс.
     
    to res2001

    Цитата:
    dvymp4  
    Вместо if exist используй for. Внутри for выполняй операции в случае наличия файлов в каталоге, в конце fora - goto на выход из цикла.

     
    Т.е. получиться примерно так?
     
    FOR %%I IN (DIR\*.*) DO (
    ECHO File exist
    goto :END)  
    :END

    Всего записей: 7 | Зарегистр. 22-12-2005 | Отправлено: 14:12 09-06-2010 | Исправлено: dvymp4, 14:15 09-06-2010
    res2001



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

    Код:
    set FEXIST=false
    FOR %%I IN (DIR\*.*) DO (
    ECHO File exist
    set FEXIST=true
    goto :END)  
    if %FEXIST%==false (
    команды для случая отсутствия файлов
    )
    :END  

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 14:35 09-06-2010
    wolf0425



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

    Цитата:
    Т.е. получиться примерно так?  

    FOR %%I IN (DIR\*) DO goto :File_exist
    :file_not_exist

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 14:39 09-06-2010
    res2001



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

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 14:46 09-06-2010
    dvymp4

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    to res2001
    to wolf0425
    Спасибо!
     
    А вообще, более быстрый способ подсчета файлов в каталоге, чем анализ результата DIR существует?

    Всего записей: 7 | Зарегистр. 22-12-2005 | Отправлено: 14:51 09-06-2010 | Исправлено: dvymp4, 15:04 09-06-2010
    Mark_Titov



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

    Цитата:
    предварительно проверить существование файла.

    А по другому ни как?

    Всего записей: 387 | Зарегистр. 12-04-2010 | Отправлено: 15:09 09-06-2010
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    dvymp4
    Думаю что нет, особенно при таком количестве файлов как у тебя.
    Можешь в том же forе посчитать и сравнить производительность.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 15:10 09-06-2010
    ComradG



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

    Цитата:
    Подскажи плиз как убрать вывод на экран ошибки при не обнаружении файла указанного в этом параметре

    попробуй в конец строки поставить что-то вроде
    findstr /i noone
    То есть должно получиться так

    Код:
    set /p site=<%systemdrive%\IP-AN-80.txt && goto ing-ok | fondstr /i noone

    Иногда такие извращения прокатывают

    Всего записей: 2038 | Зарегистр. 05-07-2008 | Отправлено: 17:31 09-06-2010
    wolf0425



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

    Цитата:
    предварительно проверить существование файла.

    А по другому ни как?
    1. а чем так плохо проверять?
    2. а по другому - идеологически невыдержанно. хотя и можно:
    Код:
    (set /p site=<%systemdrive%\IP-AN-80.txt) 2>nul

     
    dvymp4

    Цитата:
    А вообще, более быстрый способ подсчета файлов в каталоге, чем анализ результата DIR существует?
    да и там быстро. главное строчки вывода дира не самому считать, а в find /с загнать.
     

    Цитата:
    попробуй в конец строки поставить что-то вроде
    findstr /i noone
    То есть должно получиться так

    Код:
    set /p site=<%systemdrive%\IP-AN-80.txt && goto ing-ok | fondstr /i noone
    Иногда такие извращения прокатывают  
    а давайте вы в следующий раз не будете очередной бред сразу на форум писать, а сначала проверите ?
    А то количество неработающего кода в ваших сообщениях приближается к 100%...

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 19:16 09-06-2010 | Исправлено: wolf0425, 19:24 09-06-2010
    Mark_Titov



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

    Цитата:
    . а чем так плохо проверять?  
    2. а по другому - идеологически невыдержанно. хотя и можно:
     
    wolf0425, Вот! Супер - канает! Как всегда спасибо!

    Всего записей: 387 | Зарегистр. 12-04-2010 | Отправлено: 19:19 09-06-2010
    yurkesha



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    Наверное правильнее чем
    Код:
    find /c
    будет обработать результат
    Код:
    dir|find /v ":"


    ----------
    Всем непричастным рекомендую прогулки на свежем воздухе

    Всего записей: 2741 | Зарегистр. 15-12-2003 | Отправлено: 19:25 09-06-2010
       

    Страницы: 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 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 8
    vu1tur (04-09-2010 17:46): http://forum.ru-board.com/topic.cgi?forum=62&topic=21297


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru