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

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

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

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225

Открыть новую тему     Написать ответ в эту тему

KLASS



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Старые и смежные темы: по CMD и в Программах | по PowerShell | В помощь системному администратору | Прикладное программирование

PowerShell
Версии | Ассоциация и подпись сценариев
Сценарий для ассоциации файлов PowerShell и запуска неподписанных скриптов.
 
Прочее
Расширение возможностей
Функции
Write-Color
Output-DebugString
Провайдеры
Готовые скрипты
Полезные ссылки | Будет ли репозиторий PowerShell на ru-board?
Книги в PDF
Cheat Sheets
 

Cmd
Для перекодирования кириллицы 866<—>1251 пользуйтесь онлайн сервисом Перекодировщик кириллицы
 
Готовые решения и частые вопросы
 
Описания работы команд и символов участниками темы:
setlocal enabledelayedexpansion и переменные окружения
символы & и && в командной строке
Переменная %0
 
Полезные ссылки и утилиты

WSH (VBScript, JScript)
Программирование "удобняшек" на VBScript

Примечания:
• Большие куски кода заключайте в тэг [ more ]
• Чтобы не копировались концевые пробелы из форума, жмите на ссылку "Редактировать" в посте, и уже из редактора копируйте код без пробелов иначе сценарий может работать неправильно. Также для удаления концевых пробелов пользуйтесь скриптом от Nagual, или VBS-Скрипт-Модулем от ViSiToR.
• Сторонние консольные утилиты можно использовать только в виде готового решения и только в рамках сценариев. Никаких обсуждений и обучений работе с утилитами не предусмотрено и прямо запрещено правилами топика.
Шапка и около-темные вопросы |

Всего записей: 11058 | Зарегистр. 12-10-2001 | Отправлено: 13:40 17-02-2018 | Исправлено: YuS 2, 08:24 19-06-2021
KLASS



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_2
На счет скорости работы пошика обратил внимание в другом месте.
При синхронизации домашнего компа с офисным, консольная Robocopy и сценарий пошика:
Robocopy 2.30 мин.
Сценарий 5.45 мин.
При одном объеме данных, разумеется, разница более чем в 2 раза.

Всего записей: 11058 | Зарегистр. 12-10-2001 | Отправлено: 11:24 28-10-2018
YuS_2



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

Цитата:
На счет скорости работы пошика обратил внимание в другом месте.  
При синхронизации домашнего компа с офисным, консольная Robocopy и сценарий пошика:  
Robocopy 2.30 мин.  
Сценарий 5.45 мин.

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

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 11:55 28-10-2018 | Исправлено: YuS_2, 12:07 28-10-2018
KLASS



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_2
Тут не факторы, тут другое.
Если тут же пустить Robocopy по второму-третьему разу (не перегружая комп),
то время уменьшится до 1,45 мин. и так и останется.
Сценарий же маслает всегда одно время, хоть 40 раз запускай )

Всего записей: 11058 | Зарегистр. 12-10-2001 | Отправлено: 12:22 28-10-2018
YuS_2



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

Цитата:
Тут не факторы, тут другое.

Ну как же другое? оптимизация скрипта - главный фактор. Говорю же, он перегружен различными проверками и записью логов, ещё там присутствует пофайловое сравнение (небыстрая операция), а также инкрементное увеличение фильтра операцией "+=", кроме того, есть функция с такой вот проверкой внутри себя:

Код:
if ($PassedExceptions -eq $Null)
    {
        Return $False
    }

т.е. присутствует вызов функции с переменной $PassedExceptions в качестве параметра, с проверкой этой же переменной уже внутри функции... зачем?
И помимо всего прочего, достаточно много циклов, которые вносят неописуемые тормоза...
ну, это то, что первое попалось на глаза...
В общем, если заняться оптимизацией (а проще будет написать всё с чистого листа, под конкретную задачу), то можно значительно ускорить выполнение...

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 12:56 28-10-2018
KLASS



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

Всего записей: 11058 | Зарегистр. 12-10-2001 | Отправлено: 13:21 28-10-2018
virjokk

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А как на пошике корректно сравнить версии программ? Например: 5.3.12 и 5.3.2.
Ясно, что 5.3.2 - новее, но последний значимый ноль не указан. Значит, надо  
последовательно сравнивать все числа между точками с учетом разрядности.
Может есть какие-то готовые скрипты (командлеты) для этих целей?

Всего записей: 288 | Зарегистр. 19-05-2006 | Отправлено: 16:30 28-10-2018
YuS_2



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

Цитата:
Ясно, что 5.3.2 - новее

Это, как раз не ясно, ибо 2<12 ...

Цитата:
Может есть какие-то готовые скрипты (командлеты) для этих целей?

Да есть-то они есть, но если Вы сформулируете задачу, то решение получите скорее...

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 18:03 28-10-2018
PhoenixUA



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

Цитата:
Ясно, что 5.3.2 - новее

 
Powershell с Вами не согласен:

Цитата:
[version]'5.3.2' -gt [version]'5.3.12'
False

Всего записей: 2184 | Зарегистр. 17-11-2005 | Отправлено: 18:31 28-10-2018
Smitis



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

Цитата:
Почему нет, cmd конечно устарел, но он удобен для простых задач, ps - сложен, идеология microsoft - для внедрения нового нужно полностью убить все старое, если бы добавить к возможностям cmd возможности ps, был бы вообще прекрасный язык, но в ps как раз возможности cmd и вырезал

YuS_2

Цитата:
то получится в итоге именно powershell

Немного истории. Когда IBM и MS пилили вместе OS/2, там и появился новый командный процессор и новые командные файлы с расширением cmd. Командный процессор был лучше command.com, а IBM ещё и встроила возможность в командных файлах использовать свой любимый REXX как расширение, который был не PS, был другой, но для тех же задач. Потом пути IBM и MS разошлись, MS повозилась с REXX немного (конкретики уже не помню) в версиях NT 3.x, но, как обычно, у REXX был "фатальный недостаток" - его делали не в MS. К тому же, он был совсем не похож на любимый БГ бейсик. Поэтому Винда осталась без нормального командного языка. Но скриптовый бейсик потом всё-таки запилили - VBS.


----------
Разум когда-нибудь победит

Всего записей: 3179 | Зарегистр. 09-02-2003 | Отправлено: 19:14 28-10-2018
m00slim25



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

Код:
for /f %f in ('dir /b *.msu') do (for /f "tokens=3 delims=._" %i in ("%f") do (echo %i ?SHA1*%f>chk.sha&&fsum -c chk.sha))

Возможно ли как то сделать вывод контрольных сумм «всем скопом» в chk.sha, чтобы потом единожды проверить все файлы (чтобы stdout от fsum не выводился для каждого файла отдельно, а для всей кучи сразу)?

Всего записей: 1039 | Зарегистр. 30-05-2006 | Отправлено: 07:21 31-10-2018 | Исправлено: m00slim25, 07:23 31-10-2018
NIKZZZZ



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
m00slim25
Нужно заменить ">" на ">>".
 

Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 07:42 31-10-2018
m00slim25



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
NIKZZZZ
Оператор >> создаёт новый файл в случае его отсутствия?
 
Я уже решил эту задачку:
Код:
(for /f %f in ('dir /b *.msu') do (for /f "tokens=3 delims=._" %i in ("%f") do (echo %i ?SHA1*%f>>chk.sha)))&&fsum -c chk.sha&&del /q chk.sha

Всего записей: 1039 | Зарегистр. 30-05-2006 | Отправлено: 07:53 31-10-2018 | Исправлено: m00slim25, 07:58 31-10-2018
m00slim25



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ещё одна задачка:
Код:
for /f "usebackq delims=<eol>" %i in ("Collection N1.txt") do (findstr /b %i "Collection N2.txt">nul&if not errorlevel 0 (echo %i>>output.txt))

Строки целиком из первого файла должны искаться во втором. При отсутствии - вывод строки поиска в output.txt.
 
Но это не работает. Что не так в коде?

Всего записей: 1039 | Зарегистр. 30-05-2006 | Отправлено: 13:06 31-10-2018 | Исправлено: m00slim25, 13:07 31-10-2018
NIKZZZZ



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

Код:
for /f "usebackq delims=" %i in ("Collection N1.txt") do findstr /b /c:"%i" "Collection N2.txt" >nul || (>>output.txt echo %i)

Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 13:41 31-10-2018 | Исправлено: NIKZZZZ, 13:50 31-10-2018
BorlandIMHO

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

Цитата:
это не работает. Что не так в коде?

Совершенно непонятно, нафига там  "delims=<eol>"...
(И, кроме того, что вообще означает конструкция "delims=<eol>"?)

Код:
for /f "usebackq tokens=*" %i in (`type "Collection N1.txt"`) do (
1>nul findstr /B "%~i" "Collection N2.txt" || 1>>output.txt echo %i
)


----------
http://www.imho.ws

Всего записей: 2388 | Зарегистр. 12-10-2006 | Отправлено: 13:47 31-10-2018 | Исправлено: BorlandIMHO, 13:48 31-10-2018
m00slim25



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
NIKZZZZ
Ваш вариант прекрасно отработал. Благодарю!
Где можно набраться знаний про || и подобные хитрости? Уже нашёл.
 
BorlandIMHO
В вашем варианте смысла нет - работает медленнее, нагрузка на CPU выше почти в 2 раза. Результат идентичен первому примеру.
Для чего type и усложнение строки поиска для findstr? Непонятно...
 
ЗЫ. Остался 1 вопрос: Почему || сработал, а ErrorLevel - нет?

Всего записей: 1039 | Зарегистр. 30-05-2006 | Отправлено: 14:46 31-10-2018 | Исправлено: m00slim25, 15:05 31-10-2018
NIKZZZZ



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
m00slim25
Наберите в google что нибудь, типа "батник && ||" , получите кучу интересных ссылок.
В шапке так-же ссылки есть.
 
 
 
Добавлено:
m00slim25

Цитата:
ЗЫ. Остался 1 вопрос: Почему || сработал, а ErrorLevel - нет?

 
if errorlevel 0 - условие будет выполнено, если код ошибки больше или равен нулю, то-есть всегда.

Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 15:09 31-10-2018
m00slim25



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
NIKZZZZ
Цитата:
if errorlevel 0 - условие будет выполнено, если код ошибки больше или равен нулю, то-есть всегда.

Я пробовал разные варианты: if errorlevel 1, if not errorlevel 0, варианты с переменной %errorlevel% - ни один не приводил к желаемому результату.
Т.е. по факту - ExitCode сработал, а ErrorLevel оказался водой. Мне интересно почему?

Всего записей: 1039 | Зарегистр. 30-05-2006 | Отправлено: 20:24 31-10-2018
dialmak



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
m00slim25 Не уверен, но может так

Код:
for /f "usebackq delims=" %i in ("Collection N1.txt") do findstr /b /c:"%i" "Collection N2.txt" >nul & if %errorlevel% neq 0 (echo %i>>output.txt)

Хотя с || код понятней

Всего записей: 14007 | Зарегистр. 27-04-2013 | Отправлено: 20:31 31-10-2018
Smitis



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
В коллекцию готовых скриптов на PowerShell.
Компиляция страниц html сохранённых из браузера в chm.
Для работы требуются hhc.exe и hha.dll из HTML Help Workshop (должны лежать рядом со скриптом или в PATH).
В качестве параметра принимает имя html файла. Если кроме него есть папка с тем же именем с добавлением _files, файлы из папки включаются в проект. Иначе компилируется единственный файл (это отражено в названии скрипта).
Заголовок chm файла передаётся либо параметром, либо берётся из html-файла.
Устанавливается бит "развернуть на весь экран".
HtmlCompileSinglePage.ps1
Пока не удалось решить задачу прямого вызова hha.dll. Тогда можно будет обойтись без hhc.exe
 
Ссылка на архив с скриптом + hhc.exe и hha.dll


----------
Разум когда-нибудь победит

Всего записей: 3179 | Зарегистр. 09-02-2003 | Отправлено: 20:37 31-10-2018
Открыть новую тему     Написать ответ в эту тему

Страницы: 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 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225

Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Закладки » Сценарии для Windows


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru