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

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



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

    Цитата:
    set /p str=<file.txt  
    1>file.txt echo.%str: =-%
    1 в данном случае- это поток вывода?

    да, stdout. и перенаправление стоит перед командой чтобы в файл не добавлялся лишний пробел.

    Цитата:
    И почему echo идёт сразу с точкой, а не используеццо пробел?  
    а вдруг строка будет пустая? "is off" в файле наверно же ни к чему.
     
     
     
     

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 17:17 07-05-2010 | Исправлено: wolf0425, 17:18 07-05-2010
    us0r



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Mark_Titov
    Батнег_Ренамер_concept_v1.0 WindowsXP ONLY!

    Код:
    @echo off
    cls
    net use z: /delete /y
    net use \\comp_name\share_folder /delete /y
    net use z: \\comp_name\share_folder  
    net use z: /delete /y
    reg delete HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\##comp_name#share_folder /f /v _LabelFromReg
    reg add HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\##comp_name#share_folder /v _LabelFromReg /d Us0r,ThX!
    net use z: \\comp_name\share_folder /PERSISTENT:YES
    pause > nul

    Всего записей: 407 | Зарегистр. 06-12-2007 | Отправлено: 17:29 07-05-2010 | Исправлено: us0r, 19:09 07-05-2010
    Mark_Titov



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

    Цитата:
    Thanks for us0r :D (just for lulz)
    - ))))))
    us0r - Спасибо большое! Выручил, работает!...
     
    Вопрос по скриптам можно?
     
    Есть vbs скриптик хороший, рабочий -
     

    Код:
    Dim w
    Set W = CreateObject("Word.Application")
    w.Visible = false
    w.Documents.Open "C:\Temp\test.txt"
    w.ActiveDocument.PrintOut
    WScript.Sleep(1000)
    w.Quit
    Set w = Nothing

     
    ...он распечатывает файлы пути к которым указаны в нем, в данном случае это - "C:\Temp\test.txt".
    Не показывает никаких окон и тому подобное (очень удобно)...
     
    Вопрос -
     
    Скрипт лежит на сервере, нужно с моего компа его запустить обязательно батником и что бы он распечатал указанный в нем файл (распечатываемый файл будет тоже на том же серваке) НА МОЕМ ПРИНТЕРЕ...
    Это возможно?
     
    Спасибо...

    Всего записей: 387 | Зарегистр. 12-04-2010 | Отправлено: 19:05 07-05-2010 | Исправлено: Mark_Titov, 19:05 07-05-2010
    us0r



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

    Всего записей: 407 | Зарегистр. 06-12-2007 | Отправлено: 19:41 07-05-2010
    Mark_Titov



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

    Цитата:
    Теоретически это можно...

    ...А просто батником можно найти нужный файл на удаленном компе и отправить его на принтер своего компа?

    Всего записей: 387 | Зарегистр. 12-04-2010 | Отправлено: 19:45 07-05-2010
    us0r



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Да. Пути к файлу известны?

    Всего записей: 407 | Зарегистр. 06-12-2007 | Отправлено: 19:57 07-05-2010
    wolf0425



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

    Цитата:
    Скрипт лежит на сервере, нужно с моего компа его запустить обязательно батником и что бы он распечатал указанный в нем файл (распечатываемый файл будет тоже на том же серваке) НА МОЕМ ПРИНТЕРЕ...
    Это возможно?  
    а какие видятся проблемы то? тем же vbs и напечатай, только вместо "C:\Temp\test.txt" вписываешь "\\server_name\C$\Temp\test.txt" - ну если вход на с$ доступен с твоего логина.

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 21:03 07-05-2010 | Исправлено: wolf0425, 21:04 07-05-2010
    Mark_Titov



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

    Цитата:
    Да. Пути к файлу известны?

    Да -
    \\terminal_1\c$\windows\ime\shared\pal.txt
     
    Добавлено:

    Цитата:
    а какие видятся проблемы то? тем же vbs и напечатай, только вместо "C:\Temp\test.txt" вписываешь "\\server_name\C$\Temp\test.txt" - ну если вход на с$ доступен с твоего логина.

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

    Всего записей: 387 | Зарегистр. 12-04-2010 | Отправлено: 21:11 07-05-2010 | Исправлено: Mark_Titov, 21:12 07-05-2010
    wolf0425



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

    Цитата:
    ...так и делал, но доступа пишет нет.  
    ну. а если в эксплорере ввести в поле пути \\terminal_1\c$\ - доступ к папке есть?
    или в нотепаде открыть \\terminal_1\c$\windows\ime\shared\pal.txt
     
    кстати, распечатать через нотепад тоже можно
     
    notepad /p "\\terminal_1\c$\windows\ime\shared\pal.txt"
     

    Цитата:
    Может для скрипта какие-то особые параметры или разрешения нужны?!
    врядли. скорее у тебя проблемы с правами в сети какие-то.

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 21:21 07-05-2010
    Mark_Titov



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

    Цитата:
    ну. а если в эксплорере ввести в поле пути \\terminal_1\c$\ - доступ к папке есть?

    ...Конечно есть.
     

    Цитата:
    или в нотепаде открыть \\terminal_1\c$\windows\ime\shared\pal.txt

    ...да, пока так и сделал
     
    Добавлено:
    Но не устраивает что блокнот маячит, хотя потом и закрывается.
    Нельзя как-нибудь что бы он вообще не появлялся?

    Код:
    NOTEPAD /P %name% \\terminal_1\C$\WINDOWS\ime\shared\pal.txt

    Всего записей: 387 | Зарегистр. 12-04-2010 | Отправлено: 22:01 07-05-2010 | Исправлено: Mark_Titov, 01:31 08-05-2010
    us0r



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

    Код:
    Set oCtrl = CreateObject("WshController")
    Set oScript = oCtrl.CreateScript("path_string\scriptname.vbs", "computername")
    WScript.ConnectObject oScript, "RemoteFuncAliasName"
    oScript.Execute()
    IsQuit = False
    While Not IsQuit
        Wscript.Sleep 100
    Wend
    Function RemoteFuncAliasNameEnd()
        Wscript.Echo "Усио. Отпахал)))"
        IsQuit = True
    End Function
    Function RemoteFuncAliasNameError()
        Wscript.Echo oScript.Error.Description
        IsQuit = True
    End Function
    Function RemoteFuncAliasNameStart()
        Wscript.Echo "Понеслась!"
    End Function


    Цитата:
    Important Information   http://www.script-coding.info/Remote.html
    С помощью объектов WshController и WshRemote сценарии Windows Script Host можно запускать не только на локальной машине, но и на удалённых компьютерах, имеющихся в сети. При этом исполняемый сценарий не будет явно копироваться на жёсткий диск удалённого компьютера, а работа будет происходить по протоколу DCOM (Distributed COM). Примеры кода WSH в настоящей статье будут приводиться на языке VBScript.  
     
     
    Для успешного запуска должны быть соблюдены следующие требования:  
    на локальной и удалённой машинах должны быть установлены операционные системы не ниже Windows NT(SP3)/2000/XP и Windows Script Host версии не ниже 5.6;
    пользователь, который запускает сценарий, должен входить в группу локальных администраторов на той машине, где должен выполняться сценарий;
    на удалённой машине должен существовать параметр реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Script Host\Settings\Remote, равный 1 (разрешение на запуск удалённых сценариев для компьютера);
    на удалённой машине может существовать параметр реестра HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows Script Host\Settings\Remote, равный 1 или 0 (разрешение или запрет на запуск удалённых сценариев для пользователя); на удалённой машине также может существовать параметр реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Script Host\Settings\IgnoreUserSettings, равный 1 или 0 (игнорировать параметры пользователя или нет); в зависимости от последнего параметра принимается во внимание разрешение или запрет на запуск удалённых сценариев для пользователя;
    вероятно, для успешной работы придётся предварительно выполнить на удалённой машине такую команду:  
    wscript.exe -regserver
    эта команда зарегистрирует wscript.exe как "внепроцессный" COM-сервер (out of process COM server), который работает в процессе, отличном от клиентского;
    возможно, для успешной работы придётся предварительно отконфигурировать настройки протокола DCOM на удалённой машине (запустите dcomcnfg и найдите элемент WSHRemote), указав конкретного пользователя/пароль для запуска; для разрешения проблем обращайтесь к сайту Microsoft, в частности, см. описание объекта WshRemote; механизм в целом может работать немного по-разному в зависимости от версии WSH (например, могут потребоваться права на создание файлов во временном каталоге на удалённой машине);
    удалённые сценарии всегда запускаются с помощью сервера сценариев wscript.exe, причём в пакетном режиме, т.е. подавляется отображение ошибок и запросов сценария; это означает, что использование методов WScript.Echo или WshShell.Popup может привести к непредсказуемым результатам.

    Можешь запихнуть сие и в батнег, ток геммора побольше.

    Всего записей: 407 | Зарегистр. 06-12-2007 | Отправлено: 04:19 08-05-2010 | Исправлено: us0r, 13:12 08-05-2010
    Mark_Titov



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

    Цитата:
    Можешь запихнуть сие и в батнег, ток геммора побольше.

    Спасибо, а гемора на самом деле больше будет... ))

    Всего записей: 387 | Зарегистр. 12-04-2010 | Отправлено: 08:04 08-05-2010
    Rush

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

    Цитата:
    Important Information  

    Не знаю как нынче, а раньше хорошим тоном было указывать ссылку на источник.  
    http://www.script-coding.info/Remote.html

    Всего записей: 3551 | Зарегистр. 20-11-2003 | Отправлено: 08:54 08-05-2010
    Mark_Titov



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

    Цитата:
     знаю как нынче, а раньше хорошим тоном было указывать ссылку на источник.  

    ...Тут не все так просто. Запустить его на удаленке это пол дела, его нужно во-первых командой с батника (который находится на моем компе) запустить на удаленном сервере, так как сам скрипт там будет лежать, а во-вторых что бы он еще нашел мой принтер для распечатки файла...  
     

    Код:
    Dim w  
    Set W = CreateObject("Word.Application")  
    w.Visible = false  
    w.Documents.Open "C:\Temp\test.txt"  
    w.ActiveDocument.PrintOut  
    WScript.Sleep(1000)  
    w.Quit  
    Set w = Nothing

    Вот тут как говорится "костыли"...

    Всего записей: 387 | Зарегистр. 12-04-2010 | Отправлено: 10:21 08-05-2010 | Исправлено: Mark_Titov, 10:24 08-05-2010
    METAJIJI

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Есть .ini файл примерно такой структуры:

    Код:
    [start]
    val=123
    abc=456
    qwerty=fgh
    [moore]
    zxc=poi

    считываю значения опций, запоминаю в переменные

    Код:
    FOR /F "eol=; tokens=1,* delims==" %%i IN ('type "my.ini"') DO (
    IF /i %%i==val (SET val=%%j)
    IF /i %%i==abc (SET abc=%%j)
    IF /i %%i==zxc (SET zxc=%%j)
    )
     

    теперь сохраняю вот таким способом:

    Код:
    FOR /F "tokens=1* delims=]" %%i IN ('FIND /N /V "" ^< "my.ini"') DO (
      ECHO.%%j | FINDSTR /B /I "val=" 1>nul && (
      1>>"out.ini" ECHO.val=%val%
      ) || ECHO.%%j | FINDSTR /B /I "abc=" 1>nul && (
      1>>"out.ini" ECHO.abc=%abc%
      ) || ECHO.%%j | FINDSTR /B /I "zxc=" 1>nul && (
      1>>"out.ini" ECHO.zxc=%zxc%
      ) || 1>> "out.ini" ECHO.%%j
    )
    ) ELSE (ECHO.Ошибка! Файл 'my.ini' не найден!)
     

     
    Все отлично работает, но есть одно НО, процесс сохранения слишком долго длится... Опций для сохранения порядка 20 штук, при таких раскладах файл сохраняется около 3 минут. Может кто подскажет как ускорить процесс?

    Всего записей: 27 | Зарегистр. 11-03-2010 | Отправлено: 14:27 08-05-2010 | Исправлено: METAJIJI, 14:31 08-05-2010
    NIKZZZZ



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

    Цитата:
    Может кто подскажет как ускорить процесс?

    Использовать sed или его аналоги (работающие с регулярными выражениями).

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

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

    Цитата:
    считываю значения опций, запоминаю в переменные  

    это можно значительно проще делать... Если, конечно, я правильно понял структуру Вашего ini...

    Код:
    for /f "eol=[ delims=" %%A in (my.ini) do SET "%%A"

    Если в Вашем коде ";" означает начало комментария (дописываемого в конец строки типа "abc=12635  ; переменная abc") то

    Код:
    for /f "eol=; delims=" %%A in ('type my.ini^|find /I /V "["') do SET "%%A"

     
    А вообще мне непонятно, чего Вы этой операцией добиться хотите. Насколь я понимаю, в out.ini у Вас попадают все переменные, заданные в my.ini, без изменений. А все названия секций "[....]" и комменты (то, что после ";") игнорируются. Т.е. фактически осуществляется "очистка файла от мусора"? Тогда совершенно неясно, нафига вообще SET и геморрои с сохранением, если можно просто фильтровать...

    Код:
    for /f "eol=; delims=" %%A in ('type my.ini^|find /I /V "["^|find /I /V "]"') do echo %%A>>out.ini

    Всё. Все строчки my.ini, не содержащие символов "[]", обрезаются по знак ";" и выводятся в out.ini
     
    Добавлено:
    если же Вам необходимо выдернуть не все переменные из my.ini, а только вполне определённые (val, abc, zxc) то так:

    Код:
    copy /Y nul out.ini
    for /f %%A in ("val abc zxc") do (
    type my.ini|find /I /V "["|find /I /V "]"|find /i "%%A=">>out.ini
    )

    Никаких "findstr" и "if"...

    ----------
    http://www.imho.ws

    Всего записей: 2660 | Зарегистр. 12-10-2006 | Отправлено: 16:26 08-05-2010 | Исправлено: BorlandIMHO, 17:13 08-05-2010
    METAJIJI

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    После чтения значений в переменной %val% находится значение 123, оно меняется в процессе работы BAT, потом мне нужно сохранить измененные зачения! вот отсюда и непонятные танцы с SET и пр.
    проще говоря я хочу сделать редактор ini файла, средствами bat. в результате которого будут меняться значения и после обработки ini файл примет вид:

    Код:
    [start]
    val=789
    abc=941
    qwerty=fgh
    [moore]
    zxc=sdf

     
    теперь я думаю понятнее задача...
     
    по поводу sed и gsar не хотелось бы прибегать к их использованию... да и потребуется дополнительная фильтрация, потому, что в ini файле может присутствовать закомментированная переменная, а gsar к примеру ее изменит тоже, что крайне не желательно.
    например

    Код:
    val=123
    ;val=234

    после обработки командой

    Код:
    "%dir_bin%\gsar" -i -f -s"val=" -r"val=%val%" "my.ini" "out.ini"

    получается
     

    Код:
    val=%val%
    ;val=%val%

    Всего записей: 27 | Зарегистр. 11-03-2010 | Отправлено: 17:30 08-05-2010 | Исправлено: METAJIJI, 18:05 08-05-2010
    Mark_Titov



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

    Код:
    @echo off
    if [%2]==[] (
        echo Convert win1251 to dos866
        echo Usage: win2dos input.file output.file
        exit /b 1
    )
    set out=%2
    chcp 1251 >nul
    for /f "tokens=*" %%a in (%1) do call :convert %%a
    goto :eof
     
    :convert
    chcp 866 >nul
    echo %*>>%out%
    chcp 1251 >nul

    Всего записей: 387 | Зарегистр. 12-04-2010 | Отправлено: 18:56 08-05-2010
    soft111

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    У меня еще вопрос , помогите пожалуйста:
    Например в 1.txt указано число 15, значит bat файл считывает число из 1.txt и копирует текстовый файл с таким же числом в названии (т.е. 15.txt)
    Если через bat файл не возможно такое подскажите какую нибудь программу для этого или скрипт.

    Всего записей: 25 | Зарегистр. 05-11-2009 | Отправлено: 21:20 08-05-2010 | Исправлено: soft111, 09:08 09-05-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