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

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

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

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

   

vu1tur



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

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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 17:45 04-09-2010 | Исправлено: Accessor, 18:04 28-09-2010
    bomzzz



    Запрет на пост
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    вместо CALL можно использовать такуу схему. первый батник запускает второй и прекращает свою работу, по отработке второго батника, он запускает первый с командным параметром, первый баник в самом начале кода проверяет с каким параметром его запустили - если без параметра работает с самого начала, а если с параметром то с точки окончания CALL
     
    Добавлено:
       а там личные фоты, бис трусоф
     
    Добавлено:
    а две консоли вми можно запустить?

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 14:35 09-12-2010
    Free_Soft



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

    Цитата:
    а если вызвать не CALL, а START че будит?  

    надо попробовать.. придется тогда во втором батнике устанавливать кучу переменных, ибо он цеплял их call'ом из первого. Но возможно, это, что называется, меньшей кровью.
    Если у кого еще возникнут мысли по поводу, буду рад выслушать)
     
    Добавлено:

    Цитата:
    а две консоли вми можно запустить?

    возможно (и подозреваю) что в этом и есть трабл на XP. на вынь7 запускается нормально
     
    Добавлено:
    может в wmic можно где-то разрешить запуск нескольких консолей?

     
    Добавлено:
    Хотя опять, же, если консольное окно не скрывать, все отрабатывает... Западня блин
     
    Добавлено:
    две консоли физически запускаются...

    Всего записей: 1516 | Зарегистр. 19-04-2010 | Отправлено: 14:38 09-12-2010 | Исправлено: Free_Soft, 15:42 09-12-2010
    wolf0425



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

    Цитата:
    проблема в том, что любой sfx можно открыть любым архиватором, и все содержимое будет как на ладони...
    так для вскрытия запакованного Bat_To_Exe_Converter - и архиватора не надо, нужен только батник строк из ~трех, который вовремя скопирует распакованный код.  
     
    Добавлено:

    Цитата:
    Хотя опять, же, если консольное окно не скрывать, все отрабатывает... Западня блин  
    так может проблема не в Bat_To_Exe_Converter, а во взаимодействии скрытия с wmic?
    чего хоть от него получить пытаешься, когда виснет?

    Всего записей: 2920 | Зарегистр. 25-04-2007 | Отправлено: 16:11 09-12-2010 | Исправлено: wolf0425, 16:20 09-12-2010
    Free_Soft



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

    Цитата:
    так может проблема не в Bat_To_Exe_Converter, а во взаимодействии скрытия с wmic?  

    скрытие первого батника происходит с помощью самого Bat_To_Exe_Converter. так что очевидно, что проблема как раз во взаимодействии.

    Цитата:
    чего хоть от него получить пытаешься, когда виснет?  

    в смысле - какую функцию? Да хоть  

    Код:
    for /f "Delims== Skip=2 Tokens=2 UseBackQ" %%0 In (`wmic OS Get LocalDateTime /Value`) Do set LDT=%%0

    Проблема при абсолютно любом обращении. может тут еще фор чем-то мешает? Все функции вызываются через фор.

    Цитата:
    так для вскрытия запакованного Bat_To_Exe_Converter - и архиватора не надо, нужен только батник, который скопирует распакованный код.  

    не совсем понял

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



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

    Цитата:
    не совсем понял
    чего не понял то? код батника выдирается "на счет раз" из converted.exe в момент исполнения, когда код распакован - если иметь минимальное желание его отловить. никакого архиватора для этого не требуется.

    Всего записей: 2920 | Зарегистр. 25-04-2007 | Отправлено: 16:23 09-12-2010 | Исправлено: wolf0425, 16:26 09-12-2010
    Free_Soft



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    ну я не ставлю задачу все закодировать до невозможности) Понятно, что все что есть в скомпилированном файле, можно найти и в Temp'e. Однако, когда главный исполняемый файл можно просто открыть через контекстное меню, это, как один товарисч тут говорит, как-то "не кошерно"

    Всего записей: 1516 | Зарегистр. 19-04-2010 | Отправлено: 16:29 09-12-2010
    Free_Soft



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    получилось только через start /wait. Спасибо всем за участие

    Всего записей: 1516 | Зарегистр. 19-04-2010 | Отправлено: 18:37 09-12-2010
    r00tik



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте,
    захотел использовать проверку на "битость" Zip архивов перед втяжкой в 1С
     
    for /f %j in ('dir /b *.zip') do (7z t -pARCHIVE_PASSWORD %j & IF NOT %ERRORLEVEL% ==0 DEL %j)
     
    и заметил что некоректно возвращаеться код ошибки, причем если попробовать потестить, запустивши несколько раз, в одной консоли
     
    7z t -pARCHIVE_PASSWORD BAD_ARCHIVE.zip & echo %ERRORLEVEL%
     
    =====================================================================
     
    X:\.temp\cmd>7z t -pARCHIVE_PASSWORD BAD_ARCHIVE.zip & echo %ERRORLEVEL%
     
    7-Zip [64] 4.65  Copyright (c) 1999-2009 Igor Pavlov  2009-02-03
     
    Processing archive: BAD_ARCHIVE.zip
     
     
    ERROR: Попытка поместить указатель на файл перед началом файла.
     
     
    0
     
    X:\.temp\cmd>7z t -pARCHIVE_PASSWORD BAD_ARCHIVE.zip & echo %ERRORLEVEL%
     
    7-Zip [64] 4.65  Copyright (c) 1999-2009 Igor Pavlov  2009-02-03
     
    Processing archive: BAD_ARCHIVE.zip
     
     
    ERROR: Попытка поместить указатель на файл перед началом файла.
     
     
    2
     
    X:\.temp\cmd>
     
    =====================================================================
     
    Неправильный скрипт или 7z некоректно возвращает код?

    Всего записей: 45 | Зарегистр. 17-11-2006 | Отправлено: 18:50 09-12-2010 | Исправлено: r00tik, 19:17 09-12-2010
    wolf0425



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

    Цитата:
    7z t -pARCHIVE_PASSWORD BAD_ARCHIVE.zip & echo %ERRORLEVEL%  

    эта строка печатает не код завершения 7z в ней, а код завершения команды строкой ранее: %ERRORLEVEL% заменяется на значение ДО начала выполнения 7z

    Цитата:
    Неправильный скрипт или 7z некоректно возвращает код?
    неправильный скрипт.
    такое надо разбивать на 2 строки.
    никогда не используй %ERRORLEVEL% и прочите %переменные% внутри скобок и в одну строку с командами что их изменяют.
     
    а фор что ты хотел в батнике вообще пишется так:

    Код:
    for /f "delims=" %%j in ('dir /b *.zip') do (
     7z t -pARCHIVE_PASSWORD "%%~j"
     IF ERRORLEVEL 1 DEL "%%~j"
    )
     

    а если припекло в одну строку - то так:

    Код:
    for /f "delims=" %%j in ('dir /b *.zip') do 7z t -pARCHIVE_PASSWORD "%%~j" || DEL "%%~j"  

    Всего записей: 2920 | Зарегистр. 25-04-2007 | Отправлено: 19:53 09-12-2010 | Исправлено: wolf0425, 20:06 09-12-2010
    cluster

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Понадобилось собрать с компов в локальной сети (домен) след. информацию:  
    - Имя ПК (в качестве имени файла)  
    - объём свобод. места на системном разделе  
    - Версию ОС. Сервис пак.  
     
    В идеале отчётный файлик будет складываться на сетевой ресурс, откуда всё это можно и посмотреть.  
     
    Пробовал сделать с помощью Everest, но у него в отчёте слишком много лишнего, даже когда указаны только нужные параметры для отчёта.
     
    Запускать планируется через GPO

    Всего записей: 1720 | Зарегистр. 21-11-2003 | Отправлено: 20:06 09-12-2010
    OnePrg

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как расшарить каталог  и назначить права доступа?
     
    Если использую net share на XP, то расшаривает всем.
    Если использую net share на Vista, то расшаривает только текущему пользователю.
    А мне надо чтобы на Viste в одном случае расшаривало всем, а в другом только пользователю (не текущему).

    Всего записей: 349 | Зарегистр. 25-10-2007 | Отправлено: 20:06 09-12-2010
    r00tik



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Я не сильно разбираюсь, во всем етом, а надо было "на уже". Спасибо большое

    Всего записей: 45 | Зарегистр. 17-11-2006 | Отправлено: 20:18 09-12-2010
    slech



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

    Цитата:
     
    set report=%computername%_report.txt
    set share=\\dc
    ::
    echo PCname is %computername% >%share%\%report%
    set disk=C:
    echo Disk %disk% >>%share%\%report%
    fsutil volume diskfree %disk% | find /I "Total # of avail free bytes">>%share%\%report%
    set disk=D:
    echo Disk %disk% >>%share%\%report%
    fsutil volume diskfree %disk% | find /I "Total # of avail free bytes">>%share%\%report%
    systeminfo | find /I "OS Name" >>%share%\%report%
    systeminfo | find /I "OS Version" | find /v /I "BIOS" >>%share%\%report%
    ::
     

    PCname is XZ  
    Disk C:  
    Total # of avail free bytes  : 2586095616
     
    Disk D:  
    Total # of avail free bytes  : 7053115392
     
    OS Name:                   Microsoft Windows XP Professional
    OS Version:                5.1.2600 Service Pack 3 Build 2600
     


     
    psinfo - может всё сделать и без политик

    Цитата:
     
    set report=%computername%_report.txt
    set share=\\dc
    echo PCname is %computername% >%share%\%report%
    echo ------------ >>%share%\%report%
    echo Windows: >>%share%\%report%
    PsInfo.exe | find /I "Kernel version:" >>%share%\%report%
    PsInfo.exe | find /I "Product type:" >>%share%\%report%
    PsInfo.exe | find /I "Service pack:" >>%share%\%report%
    echo ------------ >>%share%\%report%
    echo Disk Space:>>%share%\%report%
    PsInfo.exe -d | find /I "Fixed">>%share%\%report%
     

    PCname is XZ  
    ------------  
    Windows:  
    Kernel version:            Microsoft Windows XP, Uniprocessor Free
    Product type:              Professional
    Service pack:              3
    ------------  
    Disk Space:
        C: Fixed      NTFS       System                 20.00 GB    2.41 GB  12.0%
        D: Fixed      NTFS       Data                  445.76 GB    6.57 GB   1.5%

    Всего записей: 4890 | Зарегистр. 10-11-2004 | Отправлено: 22:25 09-12-2010 | Исправлено: slech, 22:51 09-12-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    OnePrg
    Цитата:
    Если использую net share на Vista, то расшаривает только текущему пользователю.  


    Код:
    net share MyFolder=T:\xxx\folder  /GRANT:user1,FULL /GRANT:Everyone,READ

    ключик /GRANT есть только в net share /? Висты+, XP не понимает
     

    Всего записей: 2920 | Зарегистр. 25-04-2007 | Отправлено: 23:38 09-12-2010
    superman md



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    скачал недавно программу одну а в ней антивирус вот это нашёл #
     
    файл host.bat расскажите, точнее объясните мне что это за приблуда такая и для чего...
     
     


    ----------
    Нахожусь в очень сложном финансовом положении.
    Буду очень благодарен, если у вас найдется для меня занятие, которое поможет мне хоть немного заработать на дому!

    Всего записей: 1205 | Зарегистр. 27-06-2010 | Отправлено: 01:03 10-12-2010
    Rush

    Уже за тридцать...
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    superman md

    Цитата:
    файл host.bat расскажите, точнее объясните мне что это за приблуда такая и для чего...

    Батник записывает в файл hosts перенаправление запросов сайта odnoklassniki.ru на сайт netnic.com.cn, а остальных отмеченных на локалхост (на твой же компьютер).
    Опасности в этом батнике нет - чисто хулиганство. Просто удали эти строки из файла %windir%\system32\drivers\etc\hosts

    Всего записей: 3551 | Зарегистр. 20-11-2003 | Отправлено: 04:07 10-12-2010
    bomzzz



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

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 04:08 10-12-2010 | Исправлено: bomzzz, 04:09 10-12-2010
    K0NCTANT1N

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Распишу все по порядку
     
    Вот такая конструкция свободно отправляет файлы:
    Код:
    SET FilesYes=No
    FOR %%f IN (G:\BOX\ISH\*.*) DO SET FilesYes=Yes
    IF "%FilesYes%"=="Yes" tomail -fG:\BOX\ISH\*.* -nSERG -hU0H0 -d -t6

    Кусок ниже проверяет существуют ли в директории файлы:
    Код:
    SET FilesYes=No
    FOR %%f IN (G:\BOX\ISH\*.*) DO SET FilesYes=Yes
    IF "%FilesYes%"=="Yes"

    Кусок ниже это именно запуск с ключами почтовой программы, которая принимает имена файлов более 8 символов
    Код:
    TOMAIL -fG:\BOX\ISH\*.* -nSERG -hU0H0 -d -t6

    Решил сделать ограничение по размеру, вот получилась такая конструкция с тем самым ограничением:
    Код:
    SET FilesYes=No
    FOR %%f IN (G:\BOX\ISH\*.*) DO SET FilesYes=Yes
    IF "%FilesYes%"=="Yes" FOR /F %%A IN ('FORFILES /P G:\BOX\ISH\ /M *.*') DO (FORFILES /P G:\BOX\ISH\ /M %%~A /C "CMD /C IF @FSIZE LEQ 5000000 TOMAIL -fG:\BOX\ISH\%%~A -nSERG -hU0H0 -d -t6")

    Эта последняя конструкция отправляет файлы только которые имеют в имени не больше 8 символов, если больше, то TOMAIL возвращает ошибку что файл не найден. Не пойму почему, ведь программа TOMAIL принимает файлы большей длинны и уже сама их переименовывает в короткий стандарт 8.3 (FILENAME~1.EXT)
    И еще, если G:\BOX\ISH\%%~A поменять на %%~fsA, то получим имя файла, но путь его расположения будет указан там же откуда стартовал пакетный файл, а не G:\BOX\ISH\

    Всего записей: 19 | Зарегистр. 23-04-2008 | Отправлено: 10:53 10-12-2010 | Исправлено: K0NCTANT1N, 10:55 10-12-2010
    slech



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    for /f "tokens=2-4 delims=:,./- " %%I in ("%DATE%") do set Today=%%K%%I%%J - получаем сегодня - как получить вчера ?

    Всего записей: 4890 | Зарегистр. 10-11-2004 | Отправлено: 11:26 10-12-2010
    classics



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите, совсем запутался.
    У меня скачиваются обновления для XP и собираются они в папке: C:\WINDOWS\SoftwareDistribution\Download.
    В папке много подпапок ...0a3b10db49cb8c4e0595e410de6..... Примерно такого вида.
    Зайдя в папку, там обязательно есть подпапка \update, в которой есть файл KB2286198.cat с номером обновления.  
     
    Я хочу их установить на другой компьютер, прочитал про способ с использованием WinRAR, путем создания самораспаковывающегося архива. Который при распаковке устанавливает обновления...
     
    Помогите с батником для автоматического преобразования скачанных архивов...
     
    Алгоритм я представляю так (может есть еще идеи):
    1. Задается цикл по папкам в каталоге обновлений.
    2. получаем из имени файла KB2286198.cat номер обновлений - KB2286198
    3 Делаем самораспаковывающийся архив с полученным именем, напр, KB2286198.exe (В настройках архива укажем чтобы при окончани распаковке запускался файл /update/update.exe)
    4. Перенесем получившийся архив в папку с обновлениями, напр. D:\winupd
    5. переходим в следующую папку обновлений \SoftwareDistribution\Download
    и так со всеми файлами в папке обновлений.
     
    В результате я получу на выходе файлы
    KB2286198.exe
    KB982214.exe
    Которые можно поставить на новую систему как все вместе, так и только нужное обновление

    Всего записей: 51 | Зарегистр. 09-12-2006 | Отправлено: 11:46 10-12-2010 | Исправлено: classics, 11:46 10-12-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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 9
    vu1tur (09-01-2011 11:53): лимит страниц, продолжение — http://forum.ru-board.com/topic.cgi?forum=62&topic=22143


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru