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

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

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

vu1tur (29-07-2011 12:47): Задачи на bat-файлах 11
 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

vu1tur



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

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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 11:53 09-01-2011 | Исправлено: mazafakermazafaka, 11:22 04-06-2011
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    GRiMka
    pobocopy/mir что куда

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 09:53 08-07-2011
    JohnRD

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

    Всего записей: 205 | Зарегистр. 29-08-2004 | Отправлено: 09:58 08-07-2011
    BVV63



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    JohnRD
    Пусть при регистрации в системе пользователей выполняется скрипт следующего содержания:

    Код:
    "Reg Copy "HKCU\Keyboard Layout\Toggle" "HKU\.Default\Keyboard Layout\Toggle" /F

     
    Добавлено:

    Цитата:
    как подождать загрузки юзера и закончить скрипт?

    В свойствах профиля укажите сценарий.

    Всего записей: 3542 | Зарегистр. 17-08-2009 | Отправлено: 10:22 08-07-2011 | Исправлено: BVV63, 10:23 08-07-2011
    wolf0425



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

    Цитата:
    Так бы тоже подошло, но как это сделать? Хотя бы примерно?

    да тупо - потрошишь %time%, вычисляешь количество секунд от начала суток, например так:
    set "_time=%time: =0%"
    set /a     _time1=( 100%_time:~0,2% %% 100 * 60 + 100%_time:~3,2% %% 100 )*60 + 100%_time:~6,2% %% 100
     
    аналогичные операции после первой смены времени и после окончания программы - из этих двух величин считаешь разность - это будет продолжительность работы программы в секундах, добавляешь её к _time1 и полученное количество секунд пересчитываешь обратно в часы-минуты-секунды, после чего устанавливаешь время.

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 10:44 08-07-2011 | Исправлено: wolf0425, 11:05 08-07-2011
    JohnRD

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

    Цитата:
    Пусть при регистрации в системе пользователей выполняется скрипт

     
    если скрипт от имени пользователя то у него не хватит прав вписать в HKU\.Default\
    права админа нужны
     
    если скрипт от имени системы то  
    HKCU для системы и есть HKU\.Default\
     
    потому я и написал что скрипт выполнятся должен от имени системы, читать ветку HKU\.Default\, далее ждать загрузки юзера, читать его ветку и писать в первую если они различаются,
     
    если на этой машине загрузится другой пользователь то скрипт должен сменить раскладку системы под него.

    Всего записей: 205 | Зарегистр. 29-08-2004 | Отправлено: 11:18 08-07-2011 | Исправлено: JohnRD, 11:24 08-07-2011
    BVV63



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

    Цитата:
    если скрипт от имени пользователя то у него не хватит прав вписать в HKU\.Default\

    Согласен.
    С другой стороны никто не запрещает именно на этот ключ (HKU\.Default\Keyboard Layout\Toggle) права подредактировать, дабы у пользователей была возможность изменения.

    Всего записей: 3542 | Зарегистр. 17-08-2009 | Отправлено: 12:03 08-07-2011
    Luna_Q



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите пожалуйста разобраться, писал батник и понадобилось использовать SED (super-sed version 3.59 based on GNU sed version 3.02.80).
    Хочу очистить xml от элементов кода, начал было за здравие:  

    Код:
    sed.exe -e "s/</ /g" -e "s/>/ /g" -e "s/?/ /g" -e "s/=/ -/g" <1.xml >xml.txt

    а дальше затык, не понимаю как заменить кавычки на пробел, а так же слеш (/) и любые следующие за ним символы до пробела.

    Всего записей: 94 | Зарегистр. 13-07-2010 | Отправлено: 13:06 08-07-2011
    IFKey



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте, возможноли на bat'нике организовать простенькую программу которая будет вытаскивать файл: http://special-parts.ru/NameColorizing/?get=DownloadNameColorizing и сохраняь его в определенной директории жесткого диска? Если да, подкиньте пожалуйста примерчик.

    Всего записей: 331 | Зарегистр. 20-03-2007 | Отправлено: 13:11 08-07-2011
    Jin32



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

    Цитата:
    да тупо - потрошишь %time%, вычисляешь количество секунд от начала суток, например так:  
    set "_time=%time: =0%"  
    set /a     _time1=( 100%_time:~0,2% %% 100 * 60 + 100%_time:~3,2% %% 100 )*60 + 100%_time:~6,2% %% 100  
     
    аналогичные операции после первой смены времени и после окончания программы - из этих двух величин считаешь разность - это будет продолжительность работы программы в секундах, добавляешь её к _time1 и полученное количество секунд пересчитываешь обратно в часы-минуты-секунды, после чего устанавливаешь время.

    Ну в общих чертах это понятно, а как проще всего из количества секунд с начала суток получить время в привычном формате?

    Всего записей: 50 | Зарегистр. 22-04-2007 | Отправлено: 13:16 08-07-2011
    wolf0425



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

    Цитата:
    а как проще всего из количества секунд с начала суток получить время в привычном формате?

    set /a     _time1sec = %_time1% %% 60
    set /a     _time1min = (%_time1% /60 ) %% 60
    set /a     _time1hour = %_time1% /3600
    echo time %_time1hour%:%_time1min%:%_time1sec%
    дописывать ведущие нули для time как бы незачем.
     
     
    Добавлено:
    IFKey
    wget http://special-parts.ru/NameColorizing/?get=DownloadNameColorizing -O c:\file.txt
     
    wget.exe ищешь в шапке или в гугле.
     
    Добавлено:
    Luna_Q лучше напиши пример  - что править и что должно получиться

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 13:39 08-07-2011 | Исправлено: wolf0425, 13:45 08-07-2011
    Luna_Q



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

    Цитата:
    лучше напиши пример  - что править и что должно получиться  

    вот пример куска xml:

    Код:
       <Build>2600</Build>
                <PlatformID>2</PlatformID>
                <Edition>Professional</Edition>
                <Capacity>x32</Capacity>
                <LangUI>Russian</LangUI>

    должно получится:

    Код:
        Build 2600
                PlatformID 2
                Edition Professional
                Capacity x32
                LangUI Russian

    Всего записей: 94 | Зарегистр. 13-07-2010 | Отправлено: 13:57 08-07-2011
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    т.е. закрываюзие теги просто вырезать, у открывающих - убрать <>?
     
    sed.exe -r "s/<\/[^>]*>//g;s/<([^>]*)>/\1 /g"  <1.xml >xml.txt  
     
    но в примере как-то не все символы, которые ты пытался заменять выше.

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 14:25 08-07-2011 | Исправлено: wolf0425, 14:27 08-07-2011
    Luna_Q



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425 Спасибо! Второй день пытаюсь справку по SEDу осилить, не могу нормального источника найти.

    Цитата:
     
    но в примере как-то не все символы, которые ты пытался заменять выше.

     
    Вот:

    Код:
    ?xml version="1.0" encoding="windows-1251"?  

    еще остаются строчки > и /

    Код:
            />
    info.cod date="10.02.2009" time="04.36" /  

    а можно седом "отрезать" все строки (весь текст) ниже слова </package> ?

    Всего записей: 94 | Зарегистр. 13-07-2010 | Отправлено: 14:43 08-07-2011 | Исправлено: Luna_Q, 15:29 08-07-2011
    wolf0425



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

    Код:
    sed.exe -r "/<\/package>/,$ d;s/<\/[^>]*>//g;s/<([^>]*)>/\1 /g;s/[<>\x22\/?]//g" <1.xml >xml.txt  

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 15:10 08-07-2011
    Luna_Q



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425 СПАСИБИЩЕ! Работает! Не подскажешь в ЛС источник, где почитать по командам и выражениям?

    Всего записей: 94 | Зарегистр. 13-07-2010 | Отправлено: 15:25 08-07-2011 | Исправлено: Luna_Q, 15:25 08-07-2011
    sfinx26

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM Огромное пасибо!!!!

    Цитата:
     
    Код:
     @echo off  
     setlocal  
       
     set "cnt=100"  
     for /f "tokens=*" %%i in (' dir /b /s /ad ') do call:menu "%%i"  
     echo .......  
     set /p choice="Choose folder to copy: "  
     set /a choice+=100  
       
     for /f "tokens=2 delims==" %%i in (' set item_%choice% ') do echo copy /y "%%i\*"  
     goto:eof  
       
     :menu  
     set "item=%~1"  
     set /a cnt+=1  
       
     setlocal enabledelayedexpansion  
     echo [%cnt:~-2%] !item:%cd%\=!  
     endlocal  
       
     set "item_%cnt%=%~1"  
     
     
     
     Подразумевается, что батник лежит в корневой папке. И папок не больше 99.

     
    чутка допилил
     
    Цитата:
     
    @echo off  
     setlocal  
       
     set "cnt=100"  
     for /f "tokens=*" %%i in (' dir /b /s /ad ') do call:menu "%%i"  
     echo .......  
     set /p choice="Choose folder to copy: "  
     set /a choice+=100  
       
     for /f "tokens=2 delims==" %%i in (' set item_%choice% ') do copy /y "%%i\* "  %~dp0
     goto:eof  
       
     :menu  
     set "item=%~1"  
     set /a cnt+=1  
       
     setlocal enabledelayedexpansion  
     echo [%cnt:~-2%] !item:%cd%\=!  
     endlocal  
       
     set "item_%cnt%=%~1"  

    Всего записей: 12 | Зарегистр. 10-04-2009 | Отправлено: 16:03 08-07-2011 | Исправлено: sfinx26, 16:08 08-07-2011
    Gassmann00

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    уже несколько дней пытаюсь решить, не получается (OS: win 7 x64)
     
    нужно получит название последней папки  из полного пути
     
    этот вариант работает
     
    set pathtofind=...any path....
     
    cd /d %pathtofind%
    set path1=%cd%
    cd ..
    set path2=%cd%
     
    call set "path3=%%path1:%path2%\=%%"
     
    echo %path3%
     
     
    а вот когда в цикле, уже нет
     
    SETLOCAL ENABLEDELAYEDEXPANSION
     
    for /f "tokens=*" %%i in (' dir /b /s /ad ') do (
     
    cd /d "%%~pnxi"
     
    set path1=!cd!
    cd ..
    set path2=!cd!
    call set "path3=!!path1:!path2!\=!!"
     
    echo !path3!
     
    )
     
    где я туплю ...

    Всего записей: 69 | Зарегистр. 25-06-2004 | Отправлено: 10:44 09-07-2011 | Исправлено: Gassmann00, 10:45 09-07-2011
    01MDM



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

    Цитата:
    нужно получит название последней папки  из полного пути


    Код:
     
    @echo off
    for %%i in ( "%cd%" ) do echo %%~nxi
     



    ----------
    Вопросы в личке останутся без ответа

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 11:18 09-07-2011
    Seryoga204



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как выбрать из файла (в кодировке 1251), все строки которые начинаются на "Вход" и "Выход" и скопировать в отдельный файл.

    Всего записей: 251 | Зарегистр. 10-05-2009 | Отправлено: 17:49 10-07-2011
    king_stiven

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

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 20:28 10-07-2011
       

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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 10
    vu1tur (29-07-2011 12:47): Задачи на bat-файлах 11


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru