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

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

Модерирует : gyra, Maz

Widok (03-03-2010 16:29): Лимит страниц. Продолжаем здесь.  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

Widok



Moderator-Следопыт
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Командная строка, батники\сценарии (bat, cmd)
(часть 1) (часть 2)
Вопросы, задачи и их решения по работе с командной строкой, файлами, а также сопутствующие ссылки.

 
Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!!
 
Примечание: Большие куски кода заключайте в тэг [more]  
 
Смежные темы:
В помощь системному администратору » Автоматизация администрирования
Microsoft Windows » Задачи на bat-файлах 5
 
Полезные ссылки:
· Cmd. Описание от разработчиков
· Урок bat-аники (для начинающих)
· Курс лекций для начинающих. Полезно и просто описано
· Набор GNU утилит для win32
· Пакет утилит для организации интерфейса в bat-файлах
· Использование ansi.sys
· cmdow — изменение параметров и видимости дос-окна
· blat — отправка почты из консоли
· Справка по командам в виде Html
· Команды RunDll32
· Quick Batch File Compiler - Позволяет превратить ваш батник в независимое приложение
· Пример - получение и обработка списка пользователей
· Уильям Станек - Командная строка Microsoft Windows (вплоть до w2k3)
· Простой способ получать текущую дату всегда в одном формате (не зависит от языков и настроек)
· Переход из 32-битной версии cmd.exe в 64-битную

Всего записей: 24190 | Зарегистр. 07-04-2002 | Отправлено: 12:38 10-03-2009 | Исправлено: TechnicsKuzya, 13:54 27-12-2009
Zakkazak



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Нужно обработать файл проектов Оффлайн браузера. Сам файл обычный, ini-файл. В файле храниться 2 типа объектов - проекты и папки содержащие их.
 
Проблема: удалить в файле все проекты и папки не содержащие свойство Descr=  
 
фрагмент файла

Всего записей: 995 | Зарегистр. 12-01-2005 | Отправлено: 15:05 10-04-2009 | Исправлено: Zakkazak, 20:03 10-04-2009
Maza_Faka



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

Цитата:
Нужно обработать файл проектов Оффлайн браузера

Пример:

Код:
 
@Echo off
 
Type test.ini |Find /I "Descr=">>tmp.ini
Del /F /Q test.ini
Ren tmp.ini test.ini
 

Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 17:29 10-04-2009
Zakkazak



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maza_Faka
спасибо что нашел время,  
скрипт отбирает строки начинающиеся на Descr=, и только
Нужно чтоб, скрипт отбирал все секции ([Object]) содержащие строку Descr=.

Всего записей: 995 | Зарегистр. 12-01-2005 | Отправлено: 19:21 10-04-2009
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Zakkazak
Не знаю насколько быстро и корректно будет работать, в твоем ini встречаются специальные символы, которые приводят к ошибке, но секция с "Deskr" удаляется:

Код:
 
@echo off
setlocal
 
for /f "tokens=1,2 delims=:" %%i in ('findstr /n "\[" 1.ini') do call:parse %%i %%j
move 1.tmp 1.ini
goto:eof
 
:parse
for /f "tokens=*" %%i in ('more +%1 1.ini') do (
    echo %%i | findstr "\[" 1>nul && goto:next
    echo %%i | findstr "Descr=.*" 1>nul && goto:eof
)
 
:next
echo %2 1>>1.tmp
for /f "tokens=*" %%i in ('more +%1 1.ini') do (
    echo %%i | findstr "\[" 1>nul && goto:eof || echo %%i 1>>1.tmp
)
 

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 23:03 10-04-2009
Zakkazak



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

Цитата:
Не знаю насколько быстро и корректно будет работать,
Да, подозрительно долго обрабатывает... ждал где-то 5 минут, затем завершил вручную . Не должно быть так долго - размер файла небольшой (150 кб)
 
Выкладываю файл на рапидшару, может я что-то не так описал:
http://rapidshare.com/files/219831425/WebDown.dat.html

Всего записей: 995 | Зарегистр. 12-01-2005 | Отправлено: 01:45 11-04-2009
Zakkazak



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

Цитата:
, но секция с "Deskr" удаляется:

если ты не заметил, именно эти секции мне и нужны - они не должы удаляться

Всего записей: 995 | Зарегистр. 12-01-2005 | Отправлено: 11:05 11-04-2009
01MDM



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

Цитата:
именно эти секции мне и нужны - они не должы удаляться

 
Только с помощью сторонних утилит. Тебе нужены sed и nircmd. Штатными средствами сложный ini не отпарсить.
Здесь тоже возможны ошибки, некогда проверять:

Код:
 
@echo off
setlocal
 
copy WebDown.dat ~WebDown.ini  
 
for /f "tokens=1 delims=:" %%i in ('findstr /n /c:"[Object]" ~WebDown.ini') do (
    call:sec %%i
)
 
for /f "tokens=1 delims=:" %%i in ('findstr /n "\<Descr=.*" ~WebDown.ini') do (
    call:find %%i
)    
 
set "sections=%sections:~1%"
for /l %%i in (1,1,%cnt%) do (
    for %%j in (%sections%) do if %%j==%%i (set "del=no")
    call:del %%i  
)
 
sed -i "s/\[Object-.*\]/\[Object\]/" ~WebDown.ini
type ~WebDown.ini | more 1>WebDown.ini
del ~WebDown.ini
 
:: Расскоментируй, если результат устраивает  
:: move WebDown.ini WebDown.dat
goto:eof
 
:sec
set /a cnt+=1
sed -i "%1 s/\[Object\]/\[Object-%cnt%\]/" ~WebDown.ini
goto:eof
 
:find
for /f "tokens=2 delims=-]" %%i in ('
        more +%1 ~WebDown.ini ^| findstr "\[Object-.*\]" 2^>nul
    ') do (
        set /a num=%%i-1
        goto:set
)
 
:set
set "sections=%sections%,%num%"
goto:eof
 
:del
if not "%del%"=="no" (
nircmdc inidelsec "Full\Path\To\~WebDown.ini" "Object-%1"
)
set "del="
 


Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 14:45 11-04-2009
guru431

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Нужна помощь:
 
Есть путь в реестре:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Security Center\Svc\%%A ,
где %%A - ID пользователя, их может быть несколько
На раздел Svc права ограничены даже админам.
 
Вопрос:
Как дать группе администраторов права на запись в эти разделы (надо вначале стать владельцем раздела) и во всех %%A создать следующий ключ с параметром "EnableNotifications"=dword:00000000 ?

Всего записей: 66 | Зарегистр. 28-02-2007 | Отправлено: 16:50 11-04-2009 | Исправлено: guru431, 18:54 11-04-2009
FROST20

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте..Прочитал страниц 50 ветки но не нашел пока чего нужно мне..Вопрос у меня легкий по сравнению с тем что уже обсуждалось.. Как скопировать в папку все файлы с расширением txt созданные по четным дням недели прошлого года.. пожалуйста помогите оч надо..

Всего записей: 1 | Зарегистр. 11-04-2009 | Отправлено: 22:43 11-04-2009
Zakkazak



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM
А как надо проинстолировать SED, чтоб интерпретатор его видел. Инсталятор предложил установить в :\Program Files\GnuWin32\, так и сделал, но скрипт в таком случае не находит SED.  
Скопировал sed.exe в :\WINDOWS\system32\ , на этот раз скрипт не выдавал ошибку, но все равно без результата...
Глянь еще разок плз...

Всего записей: 995 | Зарегистр. 12-01-2005 | Отправлено: 23:10 11-04-2009
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Zakkazak
Если ты sed брал на http://gnuwin32.sourceforge.net/packages/sed.htm, то просто помести сам sed.exe и две dll-ки (libiconv2 и libintl3) в одно из мест, прописанных в переменной %PATH% (посмотреть можно командой `path`) и все должно работать.  
 
Я для сторонних утилит создал отдельный каталог и прописал переменную %PATH% в HKCU\Environment с путем к этому каталогу. Это же можно проделать через свойства "Моего Компьютера", вкладка Дополнительно > Переменные Среды > Переменные среды пользователя.

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 00:13 12-04-2009
Zakkazak



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

Цитата:
помести сам sed.exe и две dll-ки (libiconv2 и libintl3) в одно из мест, прописанных в переменной %PATH% (посмотреть можно командой `path`) и все должно работать.

во-во точно так и сделал по интуиции - только без результатно  
 
В WebDown-е из 96 секций должно остаться 6, только в них есть Descr=
увы, число секций не уменьшилось, хотя скрипт работал
 
P.S.
Сам скрипт поместил в папку обрабатываемого файла. Пробелы из скрипта удалил с помощью сценария Нагуала.

Всего записей: 995 | Зарегистр. 12-01-2005 | Отправлено: 01:49 12-04-2009
NvvLazyTiger



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Zakkazak Скрипт на AWK (WebDown.Awk):
Код:
BEGIN{
#  a2save                       # массив сохраняемых строк
  f2save=0                      # флаг "сохранять секцию"
  n2save=0                      # счётчик сохраняемых строк
}
 
function d2save ( j ) {   # выдача сохранённой секции на StdOut
  print "[Object]"              # шапка секции
  for ( n=1; n<=j; n++ ) print a2save[ n ]
  return 0
}
 
{                               # просмотр строк входного файла
  if ( $0 == "[Object]" ) {     # если это шапка, то
    if ( f2save ) d2save( n2save )  # если предыдущая секция ОК
    f2save=0                    # скинем счётчик
    n2save=0                    # скинем флаг
  } else {
    if ( substr( $0, 1, 6 ) == "Descr=" ) f2save++ #взведём флаг
    n2save++                    # увеличим счётчик
    a2save[ n2save ] = $0       # запомним строку
  }
}
 
END{
  if ( f2save ) d2save( n2save )  # если последняя секция ОК
}
 
Запуск:
Код:
gAwk -f WebDown.Awk WebDown.dat >WebDown.Ok
В WebDown.Ok только нужные секции.

Всего записей: 259 | Зарегистр. 14-02-2009 | Отправлено: 06:52 12-04-2009
Rush

Уже за тридцать...
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Zakkazak
По-моему, гораздо проще сделать так (VBS):

Код:
 
fname = "WebDown.dat":fname2 = "WebDown.ok"
set fso = createobject("scripting.filesystemobject")
set txtfile = fso.opentextfile(fname)
txt = txtfile.readall:txtfile.close
arr = split(txt,"[Object]"):arrdesc = filter(arr,"Descr=")
str = left(arr(0),instr(arr(0),"ObjectsCount=")+12) & cstr(ubound(arrdesc)+1) & vbcrlf
set txtfile = fso.opentextfile(fname2,2,true)
txtfile.write str & "[Object]" & join(arrdesc,"[Object]"):txtfile.close
 
 

Всего записей: 3551 | Зарегистр. 20-11-2003 | Отправлено: 08:30 12-04-2009
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Zakkazak
Я еще раз проверил, вроде все отрабатывает. А nircmd.exe у тебя есть? И прописан в скрипте жестко полный путь:

Цитата:
 
nircmdc inidelsec "Full\Path\To\~WebDown.ini" "Object-%1"
 

Можно конечно его и автоматом определять. Если у тебя батник рядом с обрабатываемыми файлами:

Код:
 
nircmdc inidelsec "%~f0~WebDown.ini" "Object-%1"
 
или
 
nircmdc inidelsec "%cd%\~WebDown.ini" "Object-%1"
 


Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 08:42 12-04-2009
Zakkazak



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо всем за мозговой штурм! Задача минимум выполненна .
 
01MDM

Цитата:
И прописан в скрипте жестко полный путь:  
nircmdc inidelsec "Full\Path\To\~WebDown.ini" "Object-%1"
Да, я как-то не заметил, вся проблема была в пути. Скрипт долго выполняется - около 2-х минут в отличии от vbs-скрипта.
 
Rush
Большющий риспект ! Впечатлен возможностью VBS, скрипт парсит файл за доли секунд
Надеюсь что поможешь и в задаче максимум....

Всего записей: 995 | Зарегистр. 12-01-2005 | Отправлено: 13:36 12-04-2009
guru431

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

Цитата:
Нужна помощь:  
 
Есть путь в реестре:  
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Security Center\Svc\%%A ,  
где %%A - ID пользователя, их может быть несколько  
На раздел Svc права ограничены даже админам.  
 
Вопрос:  
Как дать группе администраторов права на запись в эти разделы (надо вначале стать владельцем раздела) и во всех %%A создать следующий ключ с параметром "EnableNotifications"=dword:00000000 ?

 
C правами разобрался, осталось только добавить ключи.
 
Может кто-нибудь всё-таки знает???
 
Может, если не получается напрямую, то использовать:
REG EXPORT "HKLM\SOFTWARE\Microsoft\Security Center\Svc" Key.reg
Файл будет выглядеть так:

Цитата:
Windows Registry Editor Version 5.00
 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Security Center\Svc]
"AntiVirusOverride"=dword:00000000
"AntiSpywareOverride"=dword:00000000
"FirewallOverride"=dword:00000000
"VistaSp1"=hex(b):b2,e0,d6,23,d7,5b,c8,01
 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Security Center\Svc\S-1-5-21-688301636-752684984-1148191595-1003]
"EnableNotificationsRef"=dword:00000002
 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Security Center\Svc\S-1-5-21-688301636-752684984-1148191595-500]
"EnableNotificationsRef"=dword:00000004
 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Security Center\Svc\Vol]
 

добавить в этот файл "EnableNotifications"=dword:00000000 в следующую строчку после каждой закрывающей скобки - " ] "
А потом просто экспортировать этот файл обратно в реестр.
 
Или есть еще какой-нибудь способ?!

Всего записей: 66 | Зарегистр. 28-02-2007 | Отправлено: 15:30 12-04-2009
Rush

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

Цитата:
Надеюсь что поможешь и в задаче максимум....

Честно говоря, не представляю о чем речь...

Всего записей: 3551 | Зарегистр. 20-11-2003 | Отправлено: 16:42 12-04-2009
Zakkazak



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Задача максимум
 
1)Нужно чтоб скрипт сперва посмотрел запущен ли OE.exe, если запущен закрыл бы  OE.exe
"%ProgramFiles%\Offline Explorer Enterprise\OE.exe" /exit
 
2)после зарытия OE.exe, скрипт смотрит в реестр:
hkcu\Software\MetaProducts\Offline Explorer MX\Parameters  
берёт из строкового параметра CurrentDir значение (путь где храниться WebDown.dat)
3) Далее в скрипте который ты написал будет использоваться этот путь из пункта 2
 
4)После парсинга, WebDown.dat перемещается в .\Temp\  .  Нужно чтоб OE.exe запустился с базой WebDown.ok.  Для этого у него должно быть расширение .dat. Переименовывает
5)После этого запускаеться "%ProgramFiles%\Offline Explorer Enterprise\OE.exe"
 
 
Смысл пунктов 2) и 3) в том что, в скрипте использовался не текущий путь, а путь из реестра

Всего записей: 995 | Зарегистр. 12-01-2005 | Отправлено: 19:15 12-04-2009
Rush

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

Цитата:
Задача максимум  

Как-то так, наверное...  
Это, конечно, не отлажено пока.

Всего записей: 3551 | Зарегистр. 20-11-2003 | Отправлено: 21:36 12-04-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

Компьютерный форум Ru.Board » Компьютеры » Программы » Командная строка, батники, сценарии (bat, cmd)
Widok (03-03-2010 16:29): Лимит страниц. Продолжаем здесь.


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru