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

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

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

vu1tur (14-11-2006 16:59): http://forum.ru-board.com/topic.cgi?forum=62&topic=9040  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

hacsoft

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Задачи на bat-файлах
Вопросы, задачи и их решения по работе с командными файлами, а также сопутствующие ссылки.
 
Смежные темы:
В помощь системному администратору » Автоматизация администрирования
Программы » Командная строка, батники\сценарии
 
Полезные ссылки:
· Cmd. Описание от разработчиков
· Набор GNU утилит для win32
· Встроенный справочник по командам: hh ntcmds.chm
· Пакет утилит для организации интерфейса в bat-файлах
· Использование ansi.sys
· cmdow — изменение параметров и видимости дос-окна
· blat — отправка почты из консоли
 
Готовые решения и частые вопросы:
· Создание листинга директорий на примере создания плейлиста
· Разименовывание переменных
· Переименовывание файлов по дате создания
· Запуск сетевого подключения
· Запуск bat файлов как сервис
· Пример выполнения команд по результату команды ping
· Использование даты на день раньше чем сегодня
 
Невозможности — что нельзя сделать с помощью командных файлов:
· изменть конфигурацию IP на удаленной машине (без помощи rcmd.exe) [добавил ALEF]
 
 
Дополняем шапку: добавляем готовые решения, полезные ссылки.
 
Примечание: Большие куски кода заключайте в тэг [more]  
 
Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!!
 
Старая версия первого сообщения

Всего записей: 116 | Зарегистр. 18-11-2005 | Отправлено: 22:58 18-11-2005 | Исправлено: Elroir, 05:50 11-11-2006
igor_andreev

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
cluster
Миранды у меня нет, толком проверить не могу, но попробуй так

Код:

@ECHO OFF
 
IF EXIST +RESULT.LOG DEL +RESULT.LOG  
 
FOR %%A IN (*.TXT) DO (
  CALL :FIND_USERNAME %%A
  CALL :FIND_UIN %%A
  IF DEFINED USER IF DEFINED UIN (
    REM Если %USER% и %UIN% заданы, вызываем
    REM соответствующую метку батника и записываем их
    CALL :WRITE_USERNAME_AND_UIN
  ) ELSE (
    REM Иначе сбрасываем переменные %USER% и %UIN%
    SET USER=
    SET UIN=
  )
)  
 
GOTO :EOF
 
 
:FIND_USERNAME
FOR /F "TOKENS=2 DELIMS=:" %%I IN ('FIND "User" "%*"') DO (
  REM Если не задана переменная USER, то присваиваем USER  
  REM первому же найденному и выходим из цикла FOR,  
  REM дальше этот файл не читаем
  IF NOT DEFINED USER (SET USER=%%I && GOTO :EOF)
)
GOTO :EOF
     
:FIND_UIN
FOR /F "TOKENS=2 DELIMS=:" %%I IN ('FIND "UIN" "%*"') DO (
  REM Если не задана переменная UIN, то присваиваем UIN  
  REM первому же найденному и выходим из цикла FOR,  
  REM дальше этот файл не читаем
  IF NOT DEFINED UIN (SET UIN=%%I && GOTO :EOF)
)
GOTO :EOF
 
:WRITE_USERNAME_AND_UIN
REM Записываем в лог
ECHO %USER% - %UIN% >> +RESULT.LOG
REM И сбрасываем переменные %USER% и %UIN%
SET USER=
SET UIN=
GOTO :EOF

Если копировать с форума, то в конце каждого предложения добавляется пробел - удали. В SET USER= и SET UIN= после знака "=" не должно быть пробелов, сразу CRLF, иначе переменная не обнулится. А вообще в данном случае насчет оптимизации я согласен с evle - такой батник нужен очень редко и по идее начхать большую кучу, сколько времени он будет трудиться А то можно и ENABLEDELAYEDEXPANSION задействовать, быстрее будет работать.
 
Добавлено:
Кстати

Цитата:
В блокноте все двоеточия на одном уровне. Но там не табуляция, а пробелы. После двоеточия - один пробел.  

В блокноте все на одном уровне, потому что у тебя там моноширинный шрифт в настройках. Что и есть правильно, для написания кода скриптов или батников это рекомендуется. Моноширинные шрифты тем и хороши, что ВСЕ знаки имеют одинаковую ширину, а когда код упорядочен, его и читать легче.  
 
Вот, как выглядит с пропорциональным шрифтом

Цитата:
 
!!!!! 111 4444 # $$$$ EE(IIII)
@@@@@ ^^^ HHHH & **** %%(8888)
UUUUU &&& #### ? YYYY 55(KKKK)
 

а вот то-же самое с моноширинным(все строчки и все слова одной длины)

Цитата:

!!!!! 111 4444 # $$$$ EE(IIII)
@@@@@ ^^^ HHHH & **** %%(8888)
UUUUU &&& #### ? YYYY 55(KKKK)

Я обычно Lucida Console использую для батников.

Всего записей: 1704 | Зарегистр. 08-12-2004 | Отправлено: 13:00 01-07-2006 | Исправлено: igor_andreev, 18:52 01-07-2006
cluster

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
igor_andreev
всё работает. пасипа!
я так и не понял, почему твой скрпт не ругается на имя файла с пробелами, а у evle ругается..

Всего записей: 1720 | Зарегистр. 21-11-2003 | Отправлено: 15:02 01-07-2006
evle



1 + int rand(100);
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
твоя маска работает только в кавычках..  

У меня всё работает так, как было.

Цитата:
а вот это не помогает! он спотыкается на имени файла, а не на имени в icq (USER)  

У меня длинные имена обрабатываются правильно именно после добавления кавычек в find:
Подробнее...
Что я делаю не так?

Цитата:
я это понимаю, но вот не знаю, как дать команду, чтоб скрипт переходил на след. файл.  

Протестировал конструкцию. Результат: работает, но толку нет. Дело в том, что find в любом случае ищет текст по всему файлу и for начинает работать только после того, как find уже выдал все результаты. Таким образом пока используется команда find, каждый файл просматривается столько раз, сколько раз она применяется. Остальное работает гораздо быстрее и нет смысла это учитывать.
Да, заметил, что строчка с "find "Protocol"" в батнике совершенно лишняя, можно просто "echo --- >> ..."
 
 
 
Добавлено:
Если кому интересно, методика тестирования:
Подробнее...

----------
For every complex problem, there is a solution that is simple, neat, and wrong.

Всего записей: 2110 | Зарегистр. 03-02-2005 | Отправлено: 19:47 01-07-2006
mikolamkn

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
как заменить путь в конкретной строке- (это текстовый файл)?
Public   = C:\ффф\ччч\crypt\1111\public.key  
Secret   = С:\ффф\ччч\crypt\1111\secret.key  
AddValue = -c -wt:  
Message  = C:\ффф\ччч\out  
 
на
 
ublic   = C:\ффф\ччч\crypt\1111\public.key  
Secret   = A:\ффф\ччч\crypt\1111\secret.key  
AddValue = -c -wt:  
Message  = C:\ффф\ччч\out  
 
помогите не получается.
 
вот программулина  
@echo on  
cls
pushd E:\Cl_bank\CRYPT\  
for /D %%i in (*) do md a:\crypt\%%i
for /D %%i in (*) do copy /Y "E:\Cl_bank\CRYPT\%%i\CFG.CFG"  a:\crypt\%%i\*.*
for /D %%i in (*) do copy /Y "E:\Cl_bank\CRYPT\%%i\secret.key"  a:\crypt\%%i\*.*
rem for /D %%i in (*) do del C:\Quorum\Cl_bank\CRYPT\%%i\secret.key
 
for /D %%i in (*) do rename  a:\crypt\%%i\cfg.cfg  cfg1.cfg  
for /D %%i in (*) do for /f "tokens=* delims=" %%a in ('more^<a:\crypt\%%i\cfg1.cfg') do call :_replace %%a  
goto eof  
:_replace  
set i=%*  
echo %i %
for /D %%i in (*) do set i=%i:C:\quorum\cl_bank\crypt\%%i\secret.key=A:crypt\%%i\secret.key%
 
for /D %%i in (*) do echo %i%>>a:\crypt\%%i\cfg.cfg
rem for /D %%i in (*) do del a:\crypt\%%i\cfg1.cfg
for /D %%i in (*) do copy  /Y a:\crypt\%%i\cfg.cfg c:\quorum\cl_bank\crypt\%%i\cfg.cfg
goto eof
popd
:eof  
 
конкретно не работает вот эта строка
for /D %%i in (*) do set i=%i:C:\quorum\cl_bank\crypt\%%i\secret.key=A:crypt\%%i\secret.key%
 
конкретно не понимает запись C:\quorum\cl_bank\crypt\%%i\secret.key=A:crypt\%%i\secret.key
 
если записать так, то работает
 
for /D %%i in (*) do set i=%i:C:\=A:\%
 
 
как быть?
 
 
Добавлено:
за ранее спасибо
 
Добавлено:
хелп.

Всего записей: 15 | Зарегистр. 28-06-2006 | Отправлено: 16:38 02-07-2006 | Исправлено: mikolamkn, 16:47 02-07-2006
dimonvortex



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Господа, требуется помощь спецов.
windows xp
Ситуация такая, нужен bat-ник, который удаляет программу.
При этом не просто стирает папку, а сносит её из системы (т.е. повторяет действия установка/удаление программ windows).
 
Например:
 
Есть программа AVP Administration kit.
Своего uninstall.exe у него нет, но при этом она прописана в системе (установка/удаление программ).
 
Вопрос, как путём bat-ника её полностью убить???

Всего записей: 91 | Зарегистр. 03-07-2006 | Отправлено: 14:53 03-07-2006 | Исправлено: dimonvortex, 14:54 03-07-2006
bredonosec



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

Цитата:
, но при этом она прописана в системе (установка/удаление программ).
- вариант 1
сделать кадр реестра до инсталла и после (регшот, регснап), потом разницу собрать в рег-файлик и перед значениями двордов/регов просто добавить минус ("-")
в батнике же прописать команды удаления папки + запуск рег-файла вышеуказанного.
вариант 2
(если нет возможности/желания инсталлить прогу) - тогда каким-нить reg-cleaner-ом, напр, jv16, открыть реестр, найти ключи этой проги, экспортнуть, потом отредактить рег-файлик (добавить минус), далее второй шаг без изменений..  
 
rmk //минус перед значением параметра в рег-файле удаляет указанное из реестра//

Всего записей: 16256 | Зарегистр. 13-02-2003 | Отправлено: 16:02 03-07-2006
evle



1 + int rand(100);
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mikolamkn
Категорически не понимаю, что по-твоему должна делать строка  

Цитата:
for /D %%i in (*) do set i=%i:C:\=A:\%  

А тем более  

Цитата:
for /D %%i in (*) do set i=%i:C:\quorum\cl_bank\crypt\%%i\secret.key=A:crypt\%%i\secret.key%

Объясни на пальцах, что ты хочешь получить.

----------
For every complex problem, there is a solution that is simple, neat, and wrong.

Всего записей: 2110 | Зарегистр. 03-02-2005 | Отправлено: 17:39 03-07-2006
Allex_Van_Fogen



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Из cmd скрипта определить админ/юзер:
 

Код:
 
net user %USERNAME%|find /I "Administrators">NUL
if errorlevel 1 (echo User %USERNAME% in Users group) else (echo User %USERNAME% in Administrators group)
 

 
Для русскоязычной OS надо заменить на Администраторы (вроде бы так).
Может кто нибудь предложит более удачный вариант батника? Этот далеко не идеален.

Всего записей: 92 | Зарегистр. 09-03-2003 | Отправлено: 05:31 04-07-2006
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите пожалуйста, как можно проверить наличие %1 %2 и %3
 
есть небольшой батник для переименования группы файлов в каталоге:
 

Код:
 
@ECHO OFF
 
setlocal enabledelayedexpansion
set A=0
for %%I in ("%1") do (
    set /a A=!A!+1
    if !A! geq 100 (ren %%I %2[!A!].%3
    ) else (
    if !A! geq 10 (ren %%I %2[0!A!].%3
    ) else (
    ren %%I %2[00!A!].%3
    )
  )    
)
endlocal
 
echo all of files are renamed
 
 

 
где %1 это путь к файлам которые нужно переименовать (for example C:\Test\*.aaa)
      %2 это будущее название файлов (допустим file)
      %3 это нужное расширение (к примеру bbb)
 
Что надо:
 
Надо проверить введены-ли эти самые %1 %2 и %3
 
 if not defined %3 (соответственно если существует %3, значит есть и %1 и %2) не работает
Что делать?

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 10:28 04-07-2006
Kirillhome



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

Цитата:
Надо проверить введены-ли эти самые %1 %2 и %3
 
 if not defined %3 (соответственно если существует %3, значит есть и %1 и %2) не работает
Что делать?

 
Если не ошибаюсь, конструкция типа
 
If "%3%"=="" (
Echo Не введен 3-й параметр, работать - отказываюсь!
GOTO EOF
) else (
Echo 3-й параметр введен, будем работать...
GOTO PROD
)

Всего записей: 426 | Зарегистр. 23-11-2004 | Отправлено: 12:04 04-07-2006 | Исправлено: Kirillhome, 12:16 04-07-2006
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Kirillhome
 
Большое спасибо! Работает. Не поймешь когда и как ставить проценты и восклицательные знаки. УЖООС!

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 13:46 04-07-2006
Aroun



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здраствуйте!
Вопрос в следующем.Надо шоб юзверь мог запускать прогу, которя может запускаться только с правами админа. Причем юзверь должен не знать пароль а только щелкать по батнику и прга должна запускаться.
Что было сделанов этом направлениии:
Активно юзался schtasks, с ключом /run, но происходит инетерснасная фишка-вроде привыполнении пишет-успех и процесс мля появляется в диспетчере, но прога не работает...
Что такое не везет и как с ним бороться?

Всего записей: 680 | Зарегистр. 19-07-2005 | Отправлено: 19:34 04-07-2006
bredonosec



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

Цитата:
Причем юзверь должен не знать пароль а только щелкать по батнику и прга должна запускаться.  
- а ярлык на запуск с уже вписанными логином и паролем админа не годится? (/runas)

Всего записей: 16256 | Зарегистр. 13-02-2003 | Отправлено: 20:11 04-07-2006
Aroun



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Нет.Runas не сохраняет пароль, точнее там только учетка прописывается а пароль вбивать надо.

Всего записей: 680 | Зарегистр. 19-07-2005 | Отправлено: 20:34 04-07-2006
bredonosec



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Aroun
вариант  
7.5. Моя любимая программа работает только под аккаунтом администратора Как сделать, чтобы она работала и под аккаунтом обычного пользователя? Updated
не подходит? (в смысле, импорт ветки реестра и т.д.)

Всего записей: 16256 | Зарегистр. 13-02-2003 | Отправлено: 20:41 04-07-2006
Aroun



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Будем пробовать...
 
Добавлено:
Неа. Я просто не могу щас в реале попробовать-на работе.Решил смоделировать:взял из программ филес ехешник и вручную закрыл к нему доступ всем кроме моей учетки и перелогинился в другую(тоже админскую). Сделал все в реестре-результата-ноль((
 
Добавлено:
Неа. Я просто не могу щас в реале попробовать-на работе.Решил смоделировать:взял из программ филес ехешник и вручную закрыл к нему доступ всем кроме моей учетки и перелогинился в другую(тоже админскую). Сделал все в реестре-результата-ноль((

Всего записей: 680 | Зарегистр. 19-07-2005 | Отправлено: 20:46 04-07-2006
bredonosec



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

Цитата:
и вручную закрыл к нему доступ всем кроме моей учетки  
- так среди указанного упоминалось при необходимости открыть доступ к указанной проге (ветке, экзешнику)..  

Всего записей: 16256 | Зарегистр. 13-02-2003 | Отправлено: 22:16 04-07-2006
evle



1 + int rand(100);
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Aroun

Цитата:
Runas не сохраняет пароль, точнее там только учетка прописывается а пароль вбивать надо.

Если очень хочется, то сохраняет.

Код:
 
runas /savecred /user:admin program
 

Пароль будет запрошен один раз при первом запуске. Работает только в WinXP Pro и Win2003.
Говорят, что это даже как-будто безопасно:

Цитата:
 
Q: Why does runas not support an encrypted password as parameter?
A: Note, if you enter your password in Credential Manager (it’s in Control Panel) it is encrypted and protected by the OS, and can be loaded automatically by RunAs. Same with the /savecred option. Finally, you can use a smartcard in highly secure environments.
 

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

----------
For every complex problem, there is a solution that is simple, neat, and wrong.

Всего записей: 2110 | Зарегистр. 03-02-2005 | Отправлено: 10:02 05-07-2006
Aroun



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

Цитата:
Aroun  Цитата: Runas не сохраняет пароль, точнее там только учетка прописывается а пароль вбивать надо.   Если очень хочется, то сохраняет.  Код:   runas /savecred /user:admin program

Ну вот это наверно пойдет, пасиб, юзверь не сможет запускать проги потому как ярлыков на них нет, ситемные папки скрыты, а до запуска из командной строки ему как до бога(на то он и юзверь)

Всего записей: 680 | Зарегистр. 19-07-2005 | Отправлено: 15:41 05-07-2006
01MDM



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

Цитата:
(на то он и юзверь)

 
Ну-ну, юзверь он только прикидывается, а когда надо... Убери пункт "Выполнить" (реестр) и выставь права на cmd.exe, cacls /?

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 16:45 05-07-2006 | Исправлено: 01MDM, 16:51 05-07-2006
   

Страницы: 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-файлах
vu1tur (14-11-2006 16:59): http://forum.ru-board.com/topic.cgi?forum=62&topic=9040


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru