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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    senovr
    Мм.. твоя комстрока не выдаёт ошибки на строчку
    If %%d
    echo %%d%%f>> file3.txt
    ?
     
    Задание смутноватое, по каким признакам искать папку errorlog?
    1 вар нужно заархивировать все папки errorlog
    2 вар нужно заархивировать только те папки errorlog, если она в одной папке с log_full. csv и log_short.csv
    3 вар  нужно заархивировать только те папки errorlog, если она в одной папке last folder с файлами log_full. csv и log_short.csv
    ?

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 19:19 30-01-2010
    takt03

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    For /f %%a in ('wget -q -O - http://www.netikus.net/show_ip.html ') do set "newip=%%a"  
     
    D:\111\tel>For /F %a in ('wget -q -O - http://www.netikus.net/show_ip.html ') do
     set "newip=%a"
    "wget" не является внутренней или внешней
    командой, исполняемой программой или пакетным файлом.
     
     
    Для продолжения нажмите любую клавишу . . .
     
     
    Не пашет (((

    Всего записей: 17 | Зарегистр. 16-01-2010 | Отправлено: 20:36 30-01-2010
    wolf0425



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

    Цитата:
    "wget" не является внутренней или внешней
    командой, исполняемой программой или пакетным файлом.  
    что - и на гугле забанен, и про полезные утилиты в шапке темы не читал?  

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 20:51 30-01-2010 | Исправлено: wolf0425, 20:54 30-01-2010
    senovr

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
    Специфика сбора логов такая, что в той папке где есть full и short логи, обязательно будет папка errorlog  
    Соответственно заархивировать нужно все папки errorlog

    Всего записей: 10 | Зарегистр. 02-09-2006 | Отправлено: 22:06 30-01-2010
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    senovr
    for /r "D:/data" %%i in (.) do if exist "%%i\log_full.csv" if exist "%%i\log_short.csv" if exist "%%i\errorlog" echo "%%i\errorlog"
    вместо echo пиши свою команду

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 23:29 30-01-2010
    Ku60Pr



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    доброго времени суток...
    Есть задача определить группу пользователя в Active Directory  

    Код:
     
    Net User %username% /domain | find "*ЦО" 1>nul 2>&1
    if errorlevel 1 (
    set userAD=co
    )
    Net User %username% /domain | find "*ТМ" 1>nul 2>&1
    if errorlevel 1 (
    set userAD=tm
    )
    Net User %username% /domain | find "*НВ" 1>nul 2>&1
    if errorlevel 1 (
    set userAD=nv1
    )
    Net User %username% /domain | find "*СУ" 1>nul 2>&1
    if errorlevel 1 (
    set userAD=su
    )
     

    На основании группы будут выполняться те или иные действия...
    Но у меня как-то после такого действа все определяются как: userAD=su
    в чём ошибка... как исправить???
     
     
    Добавлено:
    Вопрос снят:
    Ответ тут

    Всего записей: 231 | Зарегистр. 25-06-2009 | Отправлено: 09:38 01-02-2010
    UltraAcid

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Пивет всем  
     
    вот сделал я себе USB флешку на основе syslinux и grub4dos. Закинул туда CIACommander, WinDOS и freeDOS с Paragon 4 драйвером для поддержки NTFS. (Брал от сюда: http://forum.ru-board.com/topic.cgi?forum=35&topic=0982#1 [?] )  
     
    Решил смастирить батник для авто определения Windows партиций, и копирования SAM и SYSTEM файлов на USB.  
     
    Проблема в том что в Windows батник работает норм. а если запускаю из под DOS он не определяет Windows партицию...  
     
    Может потскажите что в коде не так?  
    Спасибо  
     
    Батник: http://rapidshare.com/files/344239123/getsam.rar
     

    Код:
     
    @echo off
    set WINPATCH=none
     
    echo Looking for Windows partition, please wait...
    for %%a in ( C D E F G H I J K L M N O P Q R S T U V W X Y Z ) do if exist %%a:\Windows set WINPATCH=%%a:\Windows
    if %WINPATCH% == none GoTo nop
     
    echo.
    echo Windows partition found in: %WINPATCH%
    echo.
    CHOICE /N /C:YN "Copy SAM and SYSTEM files? (Yes=Y/No=N)"
    IF ERRORLEVEL ==2 GOTO No
    IF ERRORLEVEL ==1 GOTO Yes
     
    :nop
    echo.
    echo Windows partition not found...
    echo Looking for WinNT partition, please wait...
    for %%a in ( C D E F G H I J K L M N O P Q R S T U V W X Y Z ) do if exist %%a:\WinNT set WINPATCH=%%a:\WinNT
    if %WINPATCH% == none GoTo nofind
     
    :nofind
    echo.
    echo Sorry, Windows installation not found...
    GoTo end
     
    :No
    GoTo end
     
    :Yes
    echo.
    echo coping...
    MD C:\SAM\%DATE%
    copy %WINPATCH%\System32\Config\SAM C:\SAM\%DATE%\SAM
    copy %WINPATCH%\System32\Config\SYSTEM C:\SAM\%DATE%\SYSTEM
    GoTo end
     
    :end
    echo.
    echo Operation competed sucsessful.
    pause
    exit
     

    Всего записей: 179 | Зарегистр. 03-10-2005 | Отправлено: 12:22 01-02-2010 | Исправлено: UltraAcid, 13:43 01-02-2010
    Maikl_relax

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Kirillhome
    "Судя по эху - у тебя выводится весь список."
    Да верно- структура пербирется
     
    "В чём заковыка то?"
    Директории не удалаются и их сождержимое- Предмет работы требуемого скрипта )))
     
    Я же чуть выше в этом же посте все подробно описал и потом привел эхо на всяк случай:
     
    Сносится только папка  
    F:\NETSHATRE\1\NEW_STRU  
     
    а мне надо  
    F:\NETSHATRE\1\1\NEW_STRU  
    F:\NETSHATRE\1\2\NEW_STRU  
    F:\NETSHATRE\1\3\NEW_STRU  
    и т.д.  
    F:\NETSHATRE\1\N\NEW_STRU  
     
    а так же ....
     
    wolf0425
    Глянь плиз тоже, исходник то не рабоатет в итоге
    http://forum.ru-board.com/topic.cgi?forum=62&topic=19668&start=60#15

    Всего записей: 8 | Зарегистр. 27-01-2010 | Отправлено: 12:32 01-02-2010 | Исправлено: Maikl_relax, 12:38 01-02-2010
    wolf0425



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

    Цитата:
    "Судя по эху - у тебя выводится весь список."
    Да верно- структура пербирется  
    Ну, и чего хочешь - чтобы тебе объяснили, как выданную тебе в примере команду печати этих найденных элементов структуры (echo "%%~fa") заменить на команду удаления каталога, сам это сделать совершенно не мог?
     

    Код:
    for /f "delims=" %%a in (' dir /b/s/a:d "F:\NETSHATRE\1\*NEW_STRU" ') do if /i "%%~nxa" EQU "NEW_STRU" rd /s /q "%%~fa"

     
    Добавлено:

    Цитата:
    исходник то не рабоатет в итоге  
    исходник то как раз наверно работает - в нем  rd и прописано было сразу. просто отлаживать с прописанным rd - Kirillhome почему-то не хотел, когда писал пример лучшего варианта, и я его полностью понимаю
     

    Цитата:
    Сносится только папка  
    F:\NETSHATRE\1\NEW_STRU    
    строка rd /q/s "f:\name1\name2" 2>nul  перед for - для новой версии for  больше не нужна

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 12:41 01-02-2010 | Исправлено: wolf0425, 13:00 01-02-2010
    Kirillhome



    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Maikl_relax
    Смотри - воп пример, который делает папки и подпапки, а потом их уничтожает.
     

    Код:
    @echo off
    set "ISK_DIR=NEW_STRU"
    set "TMP_DIR=NO_NEW_STRU"
    set "TEK_PATH=%~dp0"
    MD %ISK_DIR% 2>null
    MD %TMP_DIR% 2>null
    FOR /L %%i in (1,1,9) DO (
        MD %%i\%ISK_DIR% 2>null
        MD %%i\%TMP_DIR% 2>null
        FOR /L %%j in (1,1,9) DO (
            MD %%i\%%j\%ISK_DIR% 2>null
            MD %%i\%%j\%TMP_DIR% 2>null))
     
    echo ===before===> all_dir.txt
    dir /b /S /a:d>> all_dir.txt
    echo ============>>all_dir.txt
    for /f "delims=" %%a in (' dir /b/s/a:d "%TEK_PATH%*%ISK_DIR%" ') do if /i "%%~nxa" EQU "%ISK_DIR%" rd /s /q "%%~fa"  
    echo ===after===>>all_dir.txt
    dir /b /S /a:d>>all_dir.txt
    echo ============>>all_dir.txt
     

    Что в нём не работает?
    Смотри на получающийся all_dir.tx - в нём написано, что было после создания (секция before) и после удаления (секция after).

    Всего записей: 426 | Зарегистр. 23-11-2004 | Отправлено: 14:20 01-02-2010
    Maikl_relax

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

    Всего записей: 8 | Зарегистр. 27-01-2010 | Отправлено: 14:25 01-02-2010 | Исправлено: Maikl_relax, 14:31 01-02-2010
    UltraAcid

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    del
     
    Добавлено:
    Ну а мне поможет кто нибуть? ато совсем ростерялся...
     
    спасибо..

    Всего записей: 179 | Зарегистр. 03-10-2005 | Отправлено: 14:45 01-02-2010 | Исправлено: UltraAcid, 15:06 01-02-2010
    NIKZZZZ



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

    Цитата:
    если запускаю из под DOS он не определяет Windows партицию...  

    А ДОС понимает NTFS ?
     
     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 15:13 01-02-2010
    UltraAcid

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

    Цитата:
    А ДОС понимает NTFS  

     

    Цитата:
    freeDOS с Paragon 4 драйвером для поддержки NTFS


    Всего записей: 179 | Зарегистр. 03-10-2005 | Отправлено: 15:19 01-02-2010
    wolf0425



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

    Цитата:
    Проблема в том что в Windows батник работает норм. а если запускаю из под DOS он не определяет Windows партицию...  
    Может потскажите что в коде не так?  
    а мы типа должны догадываться в каком ДОСе ты запускаешь и что именно не получается там у батника?
     
    btw, а команда for вообще в ДОСе была? начиная с какой версии?
    набери эту команду руками (с одним %), посмотри что пишет.
    Или просто для начала эхо включи, почитай какие команды делает.
     
    кстати, расскажи что должен делать этот кусок:
    Код:
    if %WINPATCH% == none GoTo nofind
     
    :nofind
     

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 15:19 01-02-2010 | Исправлено: wolf0425, 15:25 01-02-2010
    UltraAcid

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Пробвал в freedos и в DOS 6.22  
    Команда FOR работает отлично Если набрат рукой например  
    for %a in ( C D E F G H I J K L M N O P Q R S T U V W X Y Z ) do ECHO - %a -
    пишет:
    - c -
    - d -
    - e -
    и тд..
    значит команда работает.
    кусок if %WINPATCH% == none GoTo nofind значит что если в дисках по команде  
    for %%a in ( C D E F G H I J K L M N O P Q R S T U V W X Y Z ) do
    ненаходет папки "Windows" то значение %WINPATCH% остаётся "none" и тогда переходим к задаче "nofind" в которой описана команда поиска папки WinNT...
     
    Добавлено:
    и совсем проблема не в том что неработают команды а в том что недают резултата в досе с драйвером Paragon 4 для NTFS . Так как в виндовс CMD всё работает отлично!!!
     
    Добавлено:
    ой извиняюсь здесь писал про ":nop" ":nofind" это если ненашли ни Windows ни WinNT значет видовсов нема

    Всего записей: 179 | Зарегистр. 03-10-2005 | Отправлено: 15:40 01-02-2010 | Исправлено: UltraAcid, 16:01 01-02-2010
    wolf0425



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

    Цитата:
    сли в дисках по команде  for ненаходет папки "Windows" то значение %WINPATCH% остаётся "none" и тогда переходим к
    и тогда переходишь к следующей команде.
    Если бы метка, куда переходишь, не стояла сразу за goto - вопрос бы и не возник, а в текущей редакции - строка if никогда ни на что не влияет.
     
     
    Добавлено:

    Цитата:
    Команда FOR работает отлично Если набрат рукой например  
    набери рукой например первый FOR. или второй (хотя второй в нынешней редакции - бессмысленно, там пока без альтернативно приходит на :nofind )

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 17:58 01-02-2010 | Исправлено: wolf0425, 18:03 01-02-2010
    Kirillhome



    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    UltraAcid
    Из "дурацких советов" - попробуй переделать так:

    Код:
     
    set "WINPATCH=none"
     
    echo Looking for Windows partition, please wait...
    for %%a in ( C D E F G H I J K L M N O P Q R S T U V W X Y Z ) do (if exist %%a:\Windows\nul set WINPATCH=%%a:\Windows)
    if "%WINPATCH%"=="none" GoTo nop

    Всего записей: 426 | Зарегистр. 23-11-2004 | Отправлено: 20:23 01-02-2010
    emfs

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

    Всего записей: 900 | Зарегистр. 09-07-2007 | Отправлено: 05:31 02-02-2010
    takt03

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Извиняюсь за глупый вопрос, но глупая мелочь слишком важна для меня. Есть программа:
    @echo off
    >%systemroot%\temp\"~2.bat" (
    echo echo off
    echo chcp 1251
    echo exit
    )
    start /min %systemroot%\temp\~2.bat /b
     
    После выполнения которой мне надо удалить фаел %systemroot%\temp\~2.bat
    пробовал:  
    @echo off
    >%systemroot%\temp\temp.bat(
    echo echo off
    echo del %systemroot%\temp\"~2.bat"  
    echo exit
    )
    >%systemroot%\temp\"~2.bat" (
    echo echo off
    echo chcp 1251
    echo start /min %systemroot%\temp\temp.bat
    )
    start /min %systemroot%\temp\~2.bat /b
     
    Короче много разных вариантов перебрал, даже пробовал склеить 2 файла. НЕ чего не получается. Помогите каму не лень..

    Всего записей: 17 | Зарегистр. 16-01-2010 | Отправлено: 05:39 02-02-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