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

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

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

vu1tur (25-01-2010 12:41): лимит страниц, продолжение: http://forum.ru-board.com/topic.cgi?forum=62&topic=19668  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

vu1tur



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

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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 11:37 26-05-2009 | Исправлено: TechnicsKuzya, 13:53 27-12-2009
    soft111

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

    Всего записей: 25 | Зарегистр. 05-11-2009 | Отправлено: 22:23 09-11-2009
    mugil_cephalus

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    soft111
    думаю понадобится текстовый редактор с ф-цией удаления CR,LF

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 22:37 09-11-2009
    soft111

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    mugil_cephalus
    Мне нужно, чтобы эти действия отрабатывались быстро и без моего участия, есть одна прога на примете, но у нее уходит время на обработку (100 файлов около 15 сек), через батник думаю намного быстрее бы получилось

    Всего записей: 25 | Зарегистр. 05-11-2009 | Отправлено: 22:53 09-11-2009
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    soft111
    mugil_cephalus
     
    http://www.softboard.ru/index.php?act=Print&client=printer&f=13&t=34362
     
    К сожалению, легко от знака перевода строки не избавиться. Проще всего использовать дополнительную утилиту. Прикладываю утилиту ech.exe, ее надо поместить в папку с батником. Для использования, в отличие от echo, надо выводимую строку заключать в кавычки,
     
    http://www.softboard.ru/index.php?s=24a9f786fc8c03cda85dae61d60dcb51&act=Attach&type=post&id=8212
     
    echo 1> 1.txt
    echo 1 > 1.txt  тут ещё и пробел добавляет

    Всего записей: 2232 | Зарегистр. 17-07-2006 | Отправлено: 23:00 09-11-2009
    mugil_cephalus

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

    Цитата:
    К сожалению, легко от знака перевода строки не избавиться. Проще всего использовать дополнительную утилиту.

    я, конечно, не poweruser в CLI, но, имхо, думаю, стандартными средствами - без сторонних утилит - не обойтись точно

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 23:10 09-11-2009
    sL4yer



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    допустим у меня есть каталог.
    Например: C:\Folder\ и в нем множество вложенных папок. К-во и имя вложенных папок неизвестно. В каждой из этих папок есть папка "killme". А в папке "killme" хранятся различные файлы и папки.
    Задача - вычистить папку "killme" или удалить.

    Всего записей: 49 | Зарегистр. 22-10-2008 | Отправлено: 23:27 09-11-2009
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    soft111
    mugil_cephalus
    В шапке ещё
    Альтернативные решения

    Всего записей: 2232 | Зарегистр. 17-07-2006 | Отправлено: 00:25 10-11-2009
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
    mugil_cephalus
     
    От знака перевода строки легко избавляет "set /p"

    Код:
     
    0>nul 1>file.txt set /p="Some string here"
     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 09:33 10-11-2009
    king_stiven

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

    Код:
    @echo off
    for %%i in (q w e r t y u i o p a s d f g h j k l z x c v b n m ) do (
        if exist "%%i:\-= DIR =-" " REN "%%i:\-= DIR =-" "! DIR"
        for /f "tokens=*" %%k in ('dir /b /s /a:d "%%i:\-= DIR =-" 2^>nul') do REN "%%k" "! DIR"
    )

    Вот пример переименования папки -= DIR =- гле бы она не находилась

    Всего записей: 2232 | Зарегистр. 17-07-2006 | Отправлено: 10:53 10-11-2009 | Исправлено: king_stiven, 10:54 10-11-2009
    bigfoothart

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

    Цитата:
     
    for /f "tokens=3" %%A in ('"net use \\192.168.0.10\c$ 111 /USER:admin"') do echo _%%A_  
     

     
    при успехе пишет " _успешно_ ", при ошибках, не выводит даже __ .
     
    Ладно, пытаюсь реализовать свою идею:
     

    Код:
     
    @echo off
    cd %~dp0
    md logs
    del logs\*.log log.txt
    for /f %%i in (userlist.txt) do call :_1 %%i
     
    del logs\*.log
     
    :_1
    net use \\%1\c$ pass /USER:admin >logs\%1.log 2>&1
     
    findstr "1326" logs\%1.log
    if errorlevel 0 echo %1 #1326 wrong login or pwd >>log.txt
     
    findstr "67" logs\%1.log
    if errorlevel 0 echo %1 #67 node not found >>log.txt
     
    findstr "5" logs\%1.log
    if errorlevel 0 echo %1 #5 access denied >>log.txt
     
    findstr "64" logs\%1.log
    if errorlevel 0 echo %1 #64 node not available >>log.txt
     
    findstr "1219" logs\%1.log
    if errorlevel 0 echo %1 #1219 no more than 1 user >>log.txt
     
    ::psexec.exe \\%1 -u admin -p pass soft.bat
     
    goto :eof
     

     
     
    в userlist.txt соответственно список IP, к которым коннектимся. Не могу связать findstr с if. Нужно чтобы, если в %IP%.log найдется какая-нибудь из ошибок, он бы в log.txt заносил IP и ошибку, ну а впоследствии плюс к "echo >> log.txt" еще какие-нибудь команды выполнять, типа вход с альтернативным паролем. "If errorlevel 0" это я так условно пишу, чтобы был понятен алгоритм. Хотя по идее должно работать, но не работает как надо, потому что все 5 ошибок пишет в лог.
     
    в итоге это все нужно, чтобы запустить psexec и отслеживать что, почему не сработало.
     
    UPD:
    все работает если вместо "If errorlevel 0" поставить "If not errorlevel 1"

    Всего записей: 7 | Зарегистр. 14-03-2008 | Отправлено: 11:38 10-11-2009 | Исправлено: bigfoothart, 13:51 10-11-2009
    dvcher

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Народ помогите, данный вопрос уже не раз проскакивал но не где не был дан ответ.
    Сам ток начал изучать батники и скриптовое дело но мозгов пока не хватает для решения данной задачи.
    1. Разработать командный файл, который формировал бы ежемесячный отчет об изменениях в рабочем каталоге (файлы созданные, удаленные). Необходимо хранить список файлов в файле истории.
    2. Выполняющий в зависимости от ключа один из 3-х вариантов работы:
     - с ключом /n дописывает в начало указанных текстовых файлов строку с именем текущего файла;
     -  с ключом /b создает резервные копии указанных файлов;
     -  с ключом /d удаляет указанные файлы после предупреждения.
    Количество обрабатываемых файлов может быть переменным и задаваться в качестве параметров.
     
     

    Всего записей: 3 | Зарегистр. 06-11-2009 | Отправлено: 13:59 10-11-2009
    Maximus777

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите плиз, первый раз почему-то всегда errorlevel=0, хотя файла нет на сервере. Как избавиться от этого? У меня в файле прописаны несколько зеркал, батник должен просмотреть их все и если где-то найден файл, то закачать его.

    Код:
    ::----- Проверяем наличие файла на серваке -----
    for /F %%S in (%DltDir%\DServers.ini) do (
        Wget\wget --append-output=log.txt --spider http://%%S/delta/v5/pr/pr0%Last%.dlt
        if %errorlevel%==0 (
            echo %Last%>%DltDir%\dlt.ini
            goto answer0
            )
    )

    Всего записей: 674 | Зарегистр. 27-07-2007 | Отправлено: 15:25 10-11-2009
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maximus777
    может так
    if errorlevel 0 (
    или
     
    If not errorlevel 1 (
     
     
    Добавлено:
    bigfoothart
    Он у тебя

    Цитата:
    findstr "64" logs\%1.log  


    Цитата:
    findstr "1219" logs\%1.log  

    это что делает?
     
    findstr "64" logs\%1.log && команда

    Всего записей: 2232 | Зарегистр. 17-07-2006 | Отправлено: 15:32 10-11-2009
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maximus777
    Цитата:
    Подскажите плиз, первый раз почему-то всегда errorlevel=0

    потому что %переменными% пользоваться в теле цикла можно только константными - они преобразуются в текст и подставляются в момент старта for. то что for многострочный - не меняет ничего.
     
    или выноси тело цикла в подпрограмму  
    или переходи на !переменные!  
    или используй вариант If not errorlevel 1 (
     

    Цитата:
    может так
    if errorlevel 0 (  

    блин... от тебя уже не ожидал такой ереси
    на досуге попытайся предсказать что будет результатом выполнения команд
    md ..
    if errorlevel 0 echo =%errorlevel%=
    а после проверки вспомнить где написано - почему так

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 15:40 10-11-2009 | Исправлено: wolf0425, 16:02 10-11-2009
    sL4yer



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
     
    есть:
    C:\Folder\"random folder name 1"\killme\
    C:\Folder\"random folder name 2"\killme\
    C:\Folder\"random folder name n"\killme\
     
    random folder name - название папки (нам неизвестно).
    n - кол-во папок (тоже неизвестно).
     
    в папках random folder name есть и другие папки помимо killme.
     
    Нужно из всех этих папок (random folder name 1, 2, ... , n) удалить папку killme.

    Всего записей: 49 | Зарегистр. 22-10-2008 | Отправлено: 16:04 10-11-2009 | Исправлено: sL4yer, 16:07 10-11-2009
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    Пишу в режиме нон стопа, пусть чел сам попробует варианты, если время есть разжуй и в рот положи
     
    Добавлено:
    sL4yer
    Попроси wolf0425, пусть до ума доведёт.

    Всего записей: 2232 | Зарегистр. 17-07-2006 | Отправлено: 16:22 10-11-2009
    ArtemT

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ребят подскажите можноли зделать такую вещь...
    Прописваю на терминальном сервере путь к ЕХЕ 1с нужно чтоб он после входа терминального клиента запускался с правами Администратора....
    Нехочу давать пользователям доступ к рабочему столу и темболее говорить пароль админа
    (Проблема в связи с переходм на сервер 2008 и 1с 7.7)

    Всего записей: 51 | Зарегистр. 27-11-2006 | Отправлено: 16:27 10-11-2009
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maximus777
    проверять наличие файла можно так
    if exist "файл" (

    Всего записей: 2232 | Зарегистр. 17-07-2006 | Отправлено: 16:39 10-11-2009
    mugil_cephalus

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    подскажи, пожалста, в этом коде:
    echo on
    for %%A in (C:\test\*.txt) do call:_1 %%A
    goto :eof
     
    :_1
    for /f "tokens=*" %%i in ('type %1') do (echo %%i>C:\test\%~n1_.txt && del /q %1 && ren C:\test\%~n1_.txt %~nx1)
    goto :eof
     
    при старте первого цикла формируется виртуальный/эмулированный пул ВСЕХ итераторов (то есть виртуальный list всех *.txt) ? или нет и тогда "созданный" во втором цикле  
    лексемой - ren C:\test\%~n1_.txt %~nx1 - *.txt-файл попадет в первый цикл?
     
    soft111
    если не ошибаюсь, то скрипт "выдирает" таки пустую строку из source файла (см. ниже мой листинг (command-line mode cmd-shell; файл w:\1.txt содержит строку _text_ и еще пустую строку)), а пустая строка добавляется на этапе вывода в target файл, конкретно - в лексеме do (echo %%i>C:\test\%~n1_.txt Обход этой проблемы штатными средствами CLI предлагает 01MDM

    Цитата:
    От знака перевода строки легко избавляет "set /p"  
     
    Код:  
    0>nul 1>file.txt set /p="Some string here"  
     

     
    листинг:
    W:\>for /f "tokens=*" %i in ('type w:\1.txt') do echo %i
     
    W:\>echo _text_
    _text_
     
    W:\>
     

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 17:54 10-11-2009
    wolf0425



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

    Цитата:
    Пишу в режиме нон стопа
    Это ни разу не объясняет детской ошибки
     
    mugil_cephalus

    Цитата:
    подскажи, пожалста, в этом коде:  
    честно говоря - без понятия. проверь
    Мне придумывать как проверять - лень, я бы написал чтоб точно не попал
    for /f "delims=" %%A in ('dir /b /a-d C:\test\*.txt') do call:_1 %%A
     

    Цитата:
    если не ошибаюсь, то скрипт "выдирает" таки пустую строку из source файла

    напечатай что-то после выхода из цикла да посмотри.
     
     
     
    Добавлено:
    sL4yer

    Цитата:
    C:\Folder\"random folder name n"\killme\  
    Нужно из всех этих папок (random folder name 1, 2, ... , n) удалить папку killme.

    удалить надо из всех папок, лежащих в C:\Folder\, или только из тех, чье имя на цифру заканчивается ?
     
    первое тривиально for /d %%a in ( C:\Folder\* ) do rd /q /s "%%a\killme"
    для второго - лучше формализуй исключения

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 00:24 11-11-2009 | Исправлено: wolf0425, 02:20 11-11-2009
       

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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 7
    vu1tur (25-01-2010 12:41): лимит страниц, продолжение: http://forum.ru-board.com/topic.cgi?forum=62&topic=19668


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru