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

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

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

Maz (19-09-2020 13:36): Командная строка, батники, сценарии (bat, cmd) Часть 6  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

cchameleone



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

Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!! Чтобы не копировались концевые пробелы из форума, жмите на ссылку "Редактировать" в посте, и уже из редактора копируйте батник без пробелов.
 
Примечание: Большие куски кода заключайте в тэг [ more ].  

Смежные темы:
В помощь системному администратору » Автоматизация администрирования
Microsoft Windows » Сценарии Windows

Полезные ссылки:
· Из Windows XP Professional Product Documentation:
» Описание Cmd.exe » Command shell overview
» Using batch files » Using batch parameters » Using filters » Using command redirection operators
 
· Уроки bat-аники (для начинающих): первый и второй
· Курс из 19 лекций "Командная строка и сценарии Windows"
· Попов А. Командная строка и сценарии Windows (PDF). Курс лекций для начинающих
· Бокалий В. Командная строка (pdf-брошюрка в 20 страниц)
· Александров А., Дибров А. Урок bat-аники (pdf)
· Уильям Р. Станек - Командная строка Windows. Справочник администратора
 
· Скрываем консольные окна, Выполнение BAT-скриптов без вызова окна консоли
· cmdow — изменение параметров и видимости дос-окна, Статья в КОМПЬЮТЕРРАONLINE
· Набор GNU утилит для win32
· HS_Packet.7z - Пакет утилит для организации интерфейса в bat-файлах
· Использование ansi.sys
· blat — отправка почты из консоли
· Команды RunDll32
· Quick Batch File Compiler - Позволяет превратить ваш батник в независимое приложение
· Easy Batch Builder+Rus+Crack - Редактор BAT файлов.Через графический интерфейс программы вы сможете быстро конструировать пакетные файлы практически любой сложности. (В комплекте есть Лоадер созданный с помощью Sign Of Misery некоторые антивирусы обзывают его вирусом. Вам решать: ставить или не ставить) (ЗЕРКАЛО)
· Простой способ получать текущую дату всегда в одном формате (не зависит от языков и настроек) ещё и ещё
· Переход из 32-битной версии cmd.exe в 64-битную (1) (2)(3)

Всего записей: 2271 | Зарегистр. 16-10-2015 | Отправлено: 09:22 29-04-2016 | Исправлено: Maz, 08:47 26-03-2020
MAGNet



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

Цитата:
Эти значения редактируемые...

Имеено! Wu Tang, можно встать в поле и написать там любое значение.

Цитата:
побился код. там где рожа должно быть "двоеточие" delay

просто выключай под сообщением чекбокс "Разрешить смайлики"
повторю твой код с твоего позволения:

Код:
@echo off
set time=10800
set Process=opera.exe
:loop
tasklist|Find /i "%Process%" ||echo %Process% - not found&&goto delay
taskkill /f /im "%Process%"
:delay
echo CMD wait %time% seconds for next check
ping 127.0.0.1 -n %time% >nul
goto loop

ну и пару ошибочек поправил.. в goto двоеточие перед меткой не нужно.

Всего записей: 2024 | Зарегистр. 31-03-2004 | Отправлено: 19:17 14-07-2017
Falcon99



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем спасибо за советы. Чтобы закрыть тему решил кинуть окончательный вариант скрипта по копированию бэкапов и сравнением по контрольным суммам:

Код:
@echo off
set path_sourse=c:\temp\111
set path_dest=\\server1\rezerv
set path_month=07
set path_days=03-07
set files_mask=Backup_*.dbk  
:: Проверяем наличие целевого каталога
if exist %path_dest% (
:: Целевой каталог существует
echo Целевой каталог существует
) else (
:: Целевой каталог не существует
echo Целевой каталог не существует  
goto end
)
:: Проверяем наличие месячного каталога
if exist %path_dest%\%path_month% (
:: Месячный каталог существует
echo Месячный каталог существует
) else (
:: Месячный каталог не существует
echo Месячный каталог не существует, создаем
mkdir %path_dest%\%path_month%
)
:: Проверяем наличие конечного каталога
if exist %path_dest%\%path_month%\%path_days% (
:: Конечный каталог существует
echo Конечный каталог существует
) else (
:: Конечный каталог не существует
echo Конечный каталог не существует, создаем
mkdir %path_dest%\%path_month%\%path_days%
)
:: Проверяем наличие файлов в каталоге
if exist %path_dest%\%path_month%\%path_days%\%files_mask% (
:: Файлы уже есть, выходим
echo Файлы уже есть
goto end
) else (
:: Файлы отсутствуют, проверяем наличие файлов для копирования
if not exist %path_sourse%\%files_mask% (
:: Файлов для копирования нет, выходим
echo Файлов для копирования нет
goto end
) else (
echo Файлы есть, папка куда копировать есть, поэтому создаем файл с контрольными суммами
"C:\Program Files\7-Zip\7z.exe" h "%path_sourse%\%files_mask%" > "%path_sourse%\hash.crc32"
echo Копируем файлы и файл с контрольными суммами
robocopy %path_sourse% %path_dest%\%path_month%\%path_days% %files_mask% /z
echo Запускаем проверку файлов по контрольным суммами
"C:\Program Files\7-Zip\7z.exe" h "%path_dest%\%path_month%\%path_days%\%files_mask%" > "%path_dest%\%path_month%\%path_days%\hash.crc32"
echo Сравниваем файлы контрольных сумм
fc "%path_sourse%\hash.crc32" "%path_dest%\%path_month%\%path_days%\hash.crc32"
 
)
)
:end
pause

 
Осталось только в конце добавить, для проверки работы fc, конструкцию типа if errorlevel и все.  
 
P.s. Еще раз спасибо за советы, честно говоря заморочка с контрольными суммами делалась чтобы не дергались мнительные программеры использующие MS SQL, иначе с этими бэкапами они бы мне все плешь выели бы. "А вдруг некорректно скопировалось и он "побился". А нам этот бэкап потребуется и мы не сможем из него восстановиться. " А теперь демонстрирую экран с идентичными crc32 кодами и они отваливают.  
 
P.p.s. Кстати, знаю что файла с контрольными суммами расчитанными по md5 расширение должно быть также ".md5" , а для crc32? И вообще названия для файлов с контрольными суммами стандартизованы? А то как не нашел этой информации.

Всего записей: 590 | Зарегистр. 12-10-2005 | Отправлено: 11:58 15-07-2017 | Исправлено: Falcon99, 12:09 15-07-2017
Sinclair83

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

Цитата:
P.p.s. Кстати, знаю что файла с контрольными суммами расчитанными по md5 расширение должно быть также ".md5" , а для crc32? И вообще названия для файлов с контрольными суммами стандартизованы? А то как не нашел этой информации.

да "обзывай" как душе угодно. Главное чтобы сам не запутался.

Цитата:
echo Запускаем проверку файлов по контрольным суммами  
"C:\Program Files\7-Zip\7z.exe" h "%path_dest%\%path_month%\%path_days%\%files_mask%" > "%path_dest%\%path_month%\%path_days%\hash.crc32"

выше уже говорилось про бессмысленность такой проверки ибо файл читается по сети, а не локально.
Может у меня старый 7z (v9.20), но не увидел такого ключа "h". Точнее такой ключ есть "-h", но это вовсе не подсчёт хэшей, а вызов справки (от англ. help). Если в хэшфайле также сохраняются пути, то это нужно будет также учесть. Иначе fc всегда будет возвращать разницу.

Всего записей: 744 | Зарегистр. 07-01-2009 | Отправлено: 13:02 15-07-2017 | Исправлено: Sinclair83, 13:06 15-07-2017
Falcon99



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
7z версии 16.04, в нем есть .
Результат работы 7z:

Код:
> 7z h c:\Bootfont.bin
 
7-Zip [32] 16.00 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-10
 
Scanning
1 file, 4952 bytes (5 KiB)
 
CRC32             Size  Name
-------- -------------  ------------
122CB2B2          4952  Bootfont.bin
-------- -------------  ------------
122CB2B2          4952
 
Size: 4952
 
CRC32  for data:              122CB2B2
 
Everything is Ok

 
Соответственно все нормально пишется и проверяется через fc.  
 

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

 
Ну как я и отписался, это больше сделано для душевного спокойствия

Всего записей: 590 | Зарегистр. 12-10-2005 | Отправлено: 13:12 15-07-2017
igor_andreev

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

Цитата:
P.p.s. Кстати, знаю что файла с контрольными суммами расчитанными по md5 расширение должно быть также ".md5" , а для crc32?

.sfv(Simple File Verification)

Всего записей: 1667 | Зарегистр. 08-12-2004 | Отправлено: 03:24 16-07-2017
MAGNet



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

Код:
"C:\Program Files\7-Zip\7z.exe"

нужно заменить на

Код:
"%PROGRAMFILES%\7-Zip\7z.exe"

Это, конечно же, перфекционизм, но когда-нибудь он сослужит вам хорошую службу

Всего записей: 2024 | Зарегистр. 31-03-2004 | Отправлено: 18:24 16-07-2017
Falcon99



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

Цитата:
"%PROGRAMFILES%\7-Zip\7z.exe"  

 
Действительно, спасибо, а то не обратил внимания.
 

Цитата:
P.p.s. Кстати, знаю что файла с контрольными суммами расчитанными по md5 расширение должно быть также ".md5" , а для crc32?
 
.sfv(Simple File Verification)  

 
Большое спасибо. Именно это я искал, но найти не смог.

Всего записей: 590 | Зарегистр. 12-10-2005 | Отправлено: 11:23 17-07-2017
TVN



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

Всего записей: 2594 | Зарегистр. 19-09-2003 | Отправлено: 18:13 17-07-2017
YuS_2



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

Цитата:
Скажите, пожалуйста, что не так?

Зависит от того, что Вы ожидали от этого кода...
В любом случае, вот эти строки:

Код:
set "filename=Soft.exe"
set "filename=Softx64.exe"

работают последовательно, а это значит, что %filename% всегда будет эквивалентно Softx64.exe

Всего записей: 3199 | Зарегистр. 03-02-2009 | Отправлено: 19:59 17-07-2017
Sinclair83

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

Код:
@Echo Off
Set xOS=x64
If "%PROCESSOR_ARCHITECTURE%"=="x86" If Not Defined PROCESSOR_ARCHITEW6432 Set xOS=x86
IF %xOS%==x86 (set filename=Soft.exe) else (set filename=Softx64.exe)
 
Echo %xOS%
Echo %filename%
Pause

Всего записей: 744 | Зарегистр. 07-01-2009 | Отправлено: 21:44 17-07-2017
TVN



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

Цитата:
:: Запуск приложений в зависимости от разрядности из одной папки с именами сожержащими суффикс x64 и x86 (Soft_x64.exe и Soft_x86.exe)
 
Set xOS=x64
If "%PROCESSOR_ARCHITECTURE%"=="x86" If Not Defined PROCESSOR_ARCHITEW6432 Set xOS=x86
"Soft_%xOS%.exe"  

Все должно работать?
 
Добавлено:
Sinclair83
YuS_2
Благодарю!

Всего записей: 2594 | Зарегистр. 19-09-2003 | Отправлено: 21:58 17-07-2017
GCRaistlin



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

Цитата:
If "%PROCESSOR_ARCHITECTURE%"=="x86" If Not Defined PROCESSOR_ARCHITEW6432 Set xOS=x86

Не лучший способ определения битности системы.

Код:
 
@echo OFF
 
reg Query "HKLM\Hardware\Description\System\CentralProcessor\0" | find /i "x86" > NUL && set OS=32BIT || set OS=64BIT
 
if %OS%==32BIT echo This is a 32bit operating system
if %OS%==64BIT echo This is a 64bit operating system
 

https://stackoverflow.com/questions/12322308/batch-file-to-check-64bit-or-32bit-os

----------
Magically yours
Raistlin

Всего записей: 3096 | Зарегистр. 18-04-2005 | Отправлено: 22:20 17-07-2017
thejustsoul



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите каким образом (можно используя sed, grep), заменить число (в блоке) в xml файле:

Код:
 
        <entry>
            <label>    LABEL_1    </label>
            <activeOption>    3    </activeOption>
        </entry>
 

на  

Код:
 
        <entry>
            <label>    LABEL_1    </label>
            <activeOption>    0    </activeOption>
        </entry>
 

В этом же файле есть другие "<activeOption>число</activeOption>" и замена "в лоб" не подойдет. Над как-то найти сначала "<label>    LABEL_1    </label>", а затем заменить в этом блоке число, которое между тегами на строке ниже (если что, используется один таб, вместо 4 пробелов в коде выше)

Всего записей: 1782 | Зарегистр. 30-03-2014 | Отправлено: 00:53 18-07-2017 | Исправлено: thejustsoul, 00:56 18-07-2017
igor_andreev

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
thejustsoul
Если там всегда цифра "3" и всегда на следующей строке после "LABEL_1", то так:

Код:
sed -i.bak ":a;/^[\t ]*<label>[\t ]*LABEL_1[\t ]*<\/label>[\t ]*$/{N;y/3/0/;ba}"  file.xml


Всего записей: 1667 | Зарегистр. 08-12-2004 | Отправлено: 03:05 18-07-2017
thejustsoul



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

Цитата:
Если там всегда цифра "3" и всегда на следующей строке после "LABEL_1", то так:  

Спасибо, работает если там "3".
Цифра может быть любая. Попробовал * не прокатывает, вместо 3 в "{N;y/3/0/;ba}"
п.с. Еще рядом создается временный файл типа sedFtU8X3, как сделать так, что он не создавалось, имя разное всегда. видимо у меня старая версия, в новых не создается. Но можно и без "-i" с ">" решить это.

Всего записей: 1782 | Зарегистр. 30-03-2014 | Отправлено: 18:53 18-07-2017
MAGNet



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
igor_andreev, куда такие сложности?
если в ключе <activeOption> нужно заменить 3 на 0, то всё гораздо проще:

Код:
sed '/<activeOption>/s/3/0/g' in.xml > out.xml

in.xml и out.xml - источник и результат, соответственно
 
Добавлено:

Цитата:
Цифра может быть любая.


Код:
sed '/<activeOption>/s/[0-9]/0/g' in.xml > out.xml

Всего записей: 2024 | Зарегистр. 31-03-2004 | Отправлено: 18:57 18-07-2017
Alex_Qwerty

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

Код:
xml.exe ed --update "//entry/label[normalize-space(text())='LABEL_1']/following-sibling::activeOption" --value 0 in.xml > out.xml

Всего записей: 2091 | Зарегистр. 09-09-2006 | Отправлено: 19:11 18-07-2017
thejustsoul



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

Цитата:
 куда такие сложности?  

Потому что:

Цитата:
В этом же файле есть другие "<activeOption>число</activeOption>" и замена "в лоб" не подойдет. Над как-то найти сначала "<label>    LABEL_1    </label>", а затем заменить в этом блоке число, которое между тегами на строке ниже (если что, используется один таб, вместо 4 пробелов в коде выше)

 
Попробовал так:

Цитата:
{N;y/[0-9]/0/;ba}

Ошибочка:

Цитата:
sed: -e expression #1, char 75: strings for `y' command are different lengths

 
Alex_Qwerty

Цитата:
XMLStarlet

Работает, но табы не добавляет (хоть и не роляет, но все же). Да и хотелось бы sed'ом обойтись (т.к. уже есть или чем-то встроенным в венду). Но возьму на заметку, спасибо.

Всего записей: 1782 | Зарегистр. 30-03-2014 | Отправлено: 19:13 18-07-2017 | Исправлено: thejustsoul, 19:22 18-07-2017
MAGNet



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
thejustsoul, сегодня лень уже думать. завтра.

Код:
{N;y/[0-9]/0/;ba}

попробуйте y заменить на s

Всего записей: 2024 | Зарегистр. 31-03-2004 | Отправлено: 20:35 18-07-2017
thejustsoul



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

Цитата:
попробуйте y заменить на s

А теперь работает, спасибо-)
UDP: Не совсем правильно работает, если там число 123, то заменит на 023

Всего записей: 1782 | Зарегистр. 30-03-2014 | Отправлено: 21:16 18-07-2017 | Исправлено: thejustsoul, 21:21 18-07-2017
   

Страницы: 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 » Компьютеры » Программы » Командная строка, батники, сценарии (bat, cmd)
Maz (19-09-2020 13:36): Командная строка, батники, сценарии (bat, cmd) Часть 6


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

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.Board
© Ru.Board 2000-2020

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru