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

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    Что к чему? Я тебя никак не пойму: что
    Код:
    for /f "tokens=1,2,3 delims=." %%i in ('date /t') do (
    set day=%%i
    set mon=%%j
    set yer=%%k
    )  
    ни у кого таки не работает вовсе? Хм, у меня то работает, причем код преобразвания я проверял, работает исправно. Не знаю, чем тебе эта конструкция так насолила, но она работает. И потом, я спрашивал относительно вычисления дня недели, потому как я реализовал это так:

    Код:
    set /a dow=(%yer%-1901)*365+(%yer%-1901)/4+%day%+(!(%yer% %% 4))*(!((%mon%-3)^&16))  
    set /a dow=(%dow%+(%mon%-1)*30+2*(!((%mon%-7)^&16))-1+((65611044^>^>(2*%mon%))^&3))%%7+1
    (dow - сокращение от DayOfWeek), собственно вопрос и заключался в том, как его можно вычислить проще. В своих вычислениях я отталкивался от количества дней в году и начала ХХ века.

    Всего записей: 2038 | Зарегистр. 05-07-2008 | Отправлено: 23:32 31-07-2010 | Исправлено: ComradG, 23:39 31-07-2010
    wolf0425



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

    Цитата:
    Что к чему? Я тебя никак не пойму: что Код: 'date /t' ни у кого таки не работает вовсе?  
    код то работает, только вот работает у части народа не так как у тебя, за что такой код несколько недолюбливают - он требует проверки программистом настроек той машины, на которой будет запущен. Ну или предупреждения юзера, что результат зависит от настроек компа.
     
    и твой код точно неоправданно усложнен относительно тривиального
    set /a _day = 1%date:~0,2% -100
    set /a _mon = 1%date:~3,2% -100
    set /a _yer = %date:~6,4%
    который кроме рулеточного случая запуска в 23:59:59,99 работает/неработает примерно с тем же геморроем, что и выдергивание даты из for ... ('date /t')
     

    Цитата:
    И потом, я спрашивал относительно вычисления дня недели
    ну вот про него я тебе и ответил, что упрощать две строки арифметики - попросту бессмысленно. если данный код работает правильно, то "оптимизированный" лучше работать точно не будет.
     
    кстати сочетание set mon=%%j  и (%mon%-3) например сегодня не работает никак, (т.е. вычислялка сегодня страшно матерится и дает неверный dow), что наверно говорит о качестве проверок вообще.  
     
    Добавлено:

    Цитата:
    В своих вычислениях я отталкивался от количества дней в году и начала ХХ века.
    кстати не вижу где вычислялка учитывает то, что годы 1900 и 2100 - невисокосные. оно там точно есть? или способность правильно посчитать день недели какой-нибудь бородинской битвы в алгоритм не закладывалась специально?

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 00:07 01-08-2010 | Исправлено: wolf0425, 00:31 01-08-2010
    01MDM



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

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 07:39 01-08-2010
    wolf0425



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

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 09:53 01-08-2010 | Исправлено: wolf0425, 10:00 01-08-2010
    lorents



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день!
    Подскажите, как сделать, чтобы bat-файл считывал информацию из ini-файла?

    ----------
    Image Catalyst - оптимизация изображений без потери качества

    Всего записей: 3297 | Зарегистр. 30-12-2007 | Отправлено: 11:30 01-08-2010
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    lorents
    Наверное надо конкретизировать задачу, в общем случае как из простого текстового файла.
    Другое дело если необходимо найти нужную секцию, и именно из нее взять значение нужного параметра.
     
    В принципе можно вообще все значения ini-файла загнать в переменные и уже с ними работать.  
    Например test.ini:

    Код:
     
    [section 1]
    param_1=1.1
    param_2=1.2
    param_3=1.3
     
    [section 2]
    param_1=2.1
    param_2=2.2
    param_3=2.3
     
    [section 3]
    param_1=3.1
    param_2=3.2
    param_3=3.3
     

    На скорую руку, без засад в ini-файле:

    Код:
     
    @echo off
    setlocal
     
    for /f "tokens=1,2 delims=[]=" %%i in (test.ini) do call:set "%%i" "%%j"
    set sec_
    goto:eof
     
    :set
    if %2=="" (
        set /a cnt+=1
        set "sec=%~1"
        set "par="
    ) else (  
        set "sec_%cnt%_%par%=%sec%_%~1_%~2"
    )
    set /a par+=1
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 12:38 01-08-2010 | Исправлено: 01MDM, 13:14 01-08-2010
    zepterman

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите написать скрипт, который выполнял следующее: при отключении сеанса(на терминальном сервере), этот сеанс сразу же завершался.

    Всего записей: 190 | Зарегистр. 27-04-2006 | Отправлено: 14:00 01-08-2010
    ComradG



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    Эээ, чего-то ты опять распалился: все вычисления начинались с начала двадцатого века, то бишь 1901. Там проверка на високосные годы есть, но она там у меня через чур хитро закручена. Короче, вопрос закрыт, спасибо за критику.
    01MDM
    Круто придумано! Я этот пример как-то просмотрел, спасибо

    Всего записей: 2038 | Зарегистр. 05-07-2008 | Отправлено: 14:37 01-08-2010
    lorents



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

    ----------
    Image Catalyst - оптимизация изображений без потери качества

    Всего записей: 3297 | Зарегистр. 30-12-2007 | Отправлено: 17:44 01-08-2010
    cin



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Господа, как скопировать файл из одной папки в другую, если нет, то создать?
    Необходимо предусмотреть все возможные варианты. например пробелы в пути до искомого, русские символы и т.п.
     
    пока мись с помощью xcopy не удалось

    Всего записей: 53 | Зарегистр. 26-12-2006 | Отправлено: 18:03 01-08-2010
    us0r



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    zepterman
    А нафиг скрипт? Ты в политиках deadline настрой и радуйся... Там может не сразу (не помню точно), но после минуты- пяти сервак сам закиляет сессию...
    А со скриптом сложнее...
     
    Добавлено:
    cin
    Пути в ручную писать будешь...

    Код:
    @echo off
    cls
    setlocal
    set /p source="What:"
    set /p destination="Where:"
    xcopy "%source%" "%destination%" /L /G /H /O /Y /Z
    endlocal

    Всего записей: 406 | Зарегистр. 06-12-2007 | Отправлено: 18:04 01-08-2010
    lorents



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый вечер!
    Помогите, пожалуйста решить следующую задачу:
    у меня есть файл config.ini

    Цитата:
    [JPEG]
    ; Удаление метаданных.
    ; Если Вы хотите не удалять определенные метаданные, то замените значение "true" на "false" там, где это необходимо.
    dc = true    ;Delete comment field (as left by progs like Photoshop & Compupic)
    de = true    ;Strip Exif section (smaller JPEG file, but lose digicam info)
    di = true    ;Delete IPTC section (from Photoshop, or Picasa)
    dx = true    ;Deletex XMP section
    du = true    ;Delete non image sections except for Exif and comment sections

    А в моем bat-файле

    Код:
    "%~dp0Docs\jhead.exe" -dc -de -di -dx -du "%%~fi"

    Как видно, это одни и те же параметры (-dc -de -di -dx -du).
    Как сделать, если в config.ini значения параметров "false" то, эти параметры не загружаются в bat-файле?
    Спасибо за внимание!

    ----------
    Image Catalyst - оптимизация изображений без потери качества

    Всего записей: 3297 | Зарегистр. 30-12-2007 | Отправлено: 23:21 01-08-2010 | Исправлено: lorents, 23:21 01-08-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    lorents разбор секций инишника мне писать точно лень, а вот на переменные которые true выдрать - несложно:

    Код:
    set "_keys="
    for /f "tokens=1,2 delims=;= " %%a in (config.ini) do if /i .%%b equ .true call set "_keys=%%_keys%% -%%a"
    "%~dp0Docs\jhead.exe" %_keys% "%%~fi"  

    права такой код одинаково хорошо съедает строки  
     di=true;Delete IPTC section (from Photoshop, or Picasa)  
     dx true Deletex XMP section
     du;true - Delete non image sections except for Exif and comment sections  
    но нефиг писать неправильные инишники

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 00:24 02-08-2010 | Исправлено: wolf0425, 09:47 02-08-2010
    cin



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Еще вопрос.
    Я пишу скрипт, в котором есть необходимость создать шару, в зависимости от того где находится папка с дистрибутивами.  
    проблема в том что на некоторых компах дистрибы лежат на c:\ на каких-то на d:\
    НА некоторых компа диска d: нет. где то вместо d:\ - стоит дивиди.
     
    Как определить что диск d есть я догадался
    IF EXIST D: (set share_drive=d) else set share_drive=c
     
    Проблема возникает, если диск D - не жесткий диск, а например флеха или дивиди.
    Как с помощью cmd вытащить инфу 100% чем является диск d:\
     
    Спасибо

    Всего записей: 53 | Зарегистр. 26-12-2006 | Отправлено: 12:08 02-08-2010
    lorents



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    Большое Спасибо! Осталось разобраться в секциях

    ----------
    Image Catalyst - оптимизация изображений без потери качества

    Всего записей: 3297 | Зарегистр. 30-12-2007 | Отправлено: 12:13 02-08-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    cin
    Цитата:
    Как с помощью cmd вытащить инфу 100% чем является диск d:\  

    fsutil.exe fsinfo drivetype d:\
     
     
    Добавлено:
    lorents
    Цитата:
    Осталось разобраться в секциях
    А нафига? заняться больше нечем?
     

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 12:20 02-08-2010
    cin



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ну вот я получил  
    d:\ - Жесткий диск
     
    как мне засунуть эту инфу в батник?
    А если винда не русская?

    Всего записей: 53 | Зарегистр. 26-12-2006 | Отправлено: 12:31 02-08-2010
    BVV63



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

    Цитата:
    fsutil.exe fsinfo drivetype d:\

    Для задачи cin сойдёт. Но вообще-то желательно поизбирательнее способ найти. Чтобы мог отличить, к примеру USB-HDD и Subst-разделы от "честных" разделов HDD. Ни так, ни через опрос WMI это не получается.
     
    Добавлено:
    Впрочем от Subst-разделов можно отделаться дополнительной обработкой команды "Subst". Но вот ещё бы и от USB-HDD-разделов как-то отделаться.
     
    Добавлено:
    cin
    Можешь также такой способ использовать:

    Код:
    Set Share_Drive=C
    For /F "Skip=1 Tokens=1 UseBackQ" %%A In (`WMIC.Exe Path Win32_LogicalDisk Where DeviceID^="D:" Get DriveType`) Do (If "%%A"=="3" Set Share_Drive=D)

    DriveType 3 - это разделы HDD.
    Немножко исправил.

    Всего записей: 3542 | Зарегистр. 17-08-2009 | Отправлено: 12:35 02-08-2010 | Исправлено: BVV63, 13:03 02-08-2010
    us0r



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

    Код:
    for /f "usebackq delims==" %%i in (`fsutil fsinfo drivetype D:\`) do set driveinfod=%%i
    REM для проверки можешь вставить следующую строку:
    echo %driveinfod%

    Всего записей: 406 | Зарегистр. 06-12-2007 | Отправлено: 13:11 02-08-2010
    lorents



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    Сейчас протестировал твой код, и вышло так что jhead.exe не получает параметры.
    Файл config.ini

    Цитата:
    dc = true    ;Delete comment field (as left by progs like Photoshop & Compupic)
    de = true    ;Strip Exif section (smaller JPEG file, but lose digicam info)
    di = true    ;Delete IPTC section (from Photoshop, or Picasa)
    dx = true    ;Deletex XMP section
    du = true    ;Delete non image sections except for Exif and comment sections

     

    Цитата:
    А нафига? заняться больше нечем?  

    Там будет несколько секций

    ----------
    Image Catalyst - оптимизация изображений без потери качества

    Всего записей: 3297 | Зарегистр. 30-12-2007 | Отправлено: 15:45 02-08-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