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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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.
• Сторонние консольные утилиты можно использовать только в виде готового решения и только в рамках сценариев. Никаких обсуждений и обучений работе с утилитами не предусмотрено и прямо запрещено правилами топика.
Шапка и около-темные вопросы |

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



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

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


Цитата:
В локальном контексте, одноименная переменная из родительской области, будет перекрыта присвоенным значением в локальной области. И это правильно.
В случае с автоматическими переменными логика работы отличается...  

Вопрос не в том, как это работает, вопрос в том, что это не очень надёжно. Зрительно не всегда возможно сразу определить, к какому блоку относиться переменная. Или по другому - по имени переменной невозможно определить, какую информацию она содержит и изменить это (дать осмысленное имя нельзя). А это ухудшает читабельность кода. А значит снижает надёжность.

Цитата:
Навскидку - вряд ли. Но в сомнительных случаях, открываю спецификацию и запускаю поиск...

Тут один вундервафлист нам рассказывал, как в PS всё просто, что чуть ли не сам за программиста думает. И как здорово, не отвлекаясь на мелочи, думать о глобальных вселенских проблемах (не дословно, но смысл такой).
 


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

Всего записей: 3179 | Зарегистр. 09-02-2003 | Отправлено: 18:55 18-11-2018 | Исправлено: Smitis, 18:56 18-11-2018
LevT



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

Цитата:
Или по другому - по имени переменной невозможно определить, какую информацию она содержит и изменить это

 
Это не баг, а фича.
 
 

Цитата:
(дать осмысленное имя нельзя)

 
$filename = $_
если так приспичило

Всего записей: 17126 | Зарегистр. 14-10-2001 | Отправлено: 19:01 18-11-2018
Smitis



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

Цитата:
Это не баг, а фича.

Пусть будет фича. Фича, снижающая читабельность кода. Так лучше?

Цитата:
$filename = $_
если так приспичило

Спасибо, Кэп! Ваш совет как всегда своевременен и сходу решает все проблемы.


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

Всего записей: 3179 | Зарегистр. 09-02-2003 | Отправлено: 19:46 18-11-2018
YuS_2



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

Цитата:
вопрос в том, что это не очень надёжно. Зрительно не всегда возможно сразу определить, к какому блоку относиться переменная.

Возможно. А может быть, что это просто дело привычки... не так уж много вариантов ведь. При частом использовании, это непременно отложится в памяти и будет использоваться "на автомате"...

Цитата:
Или по другому - по имени переменной невозможно определить, какую информацию она содержит и изменить это (дать осмысленное имя нельзя). А это ухудшает читабельность кода. А значит снижает надёжность.

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

Цитата:
И как здорово, не отвлекаясь на мелочи, думать о глобальных вселенских проблемах

Ну, понятно же, что "думать" и "предполагать" совсем не эквивалент "реальности" и "существованию"...

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 19:56 18-11-2018 | Исправлено: YuS_2, 19:59 18-11-2018
LevT



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


Цитата:
Фича, снижающая читабельность кода.

 
Кому это мешает, вольны PS не использовать.
Мне - не мешает. И когда я совсем недавно сам наткнулся на $_ в блоке catch, я только порадовался возможности освежить знания.
 
Код с вложенными скриптблоками $_ вообще-то не предназначен для чтения чайниками--новичками-подмастерьями, для них пишется такое.

Всего записей: 17126 | Зарегистр. 14-10-2001 | Отправлено: 20:00 18-11-2018
Baltazar500



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, ЧЯДНТ ?
Код:
setlocal
 
:aaa
for /f %%a in ('type 123.txt') do set aaa=%%a
 
:bbb
for /f %%a in ('type 123.txt') do call :ccc %%a
 
:ccc
echo %~1
if %aaa%==%~1 nircmd wait 3000 && goto bbb
if %~1==123 nircmd wait 3000 && goto :aaa
 
endlocal
 
pause
В скрипте мониторится содержимое файла 123.txt и скрипт его гоняет по кругу, пока значение не меняется или не становится !=123. Далее по идее должен идти пауза и завершение скрипта, но после паузы его продолжает гонять по кругу. В целом есть решение в виде exit'a после паузы, но мне кажется это больше костыль, чем правильное решение.

Всего записей: 2080 | Зарегистр. 19-09-2011 | Отправлено: 20:02 18-11-2018
Smitis



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

Цитата:
Мне - не мешает.

Я абсолютно уверен, что для написания вундерфавель всё это не мешает. Поэтому, прошу, Вас, не заморачивайтесь такими сложными проблемами.


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

Всего записей: 3179 | Зарегистр. 09-02-2003 | Отправлено: 20:04 18-11-2018
iNNOKENTIY21



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

Цитата:
user-agent=Wget  

Спасибо, user-agent пробовал, но firefox, Wget не догадался бы. И про ftp не знал..

Всего записей: 3504 | Зарегистр. 16-08-2012 | Отправлено: 20:10 18-11-2018
Smitis



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

Цитата:
но после паузы его продолжает гонять по кругу

Потому что завершения командного файла из :ccc вернёт управление в точку вызова call :ccc.
Кроме того, вызов call в случае goto нормально не завершается. Стек вызовов конечно большой, но в случае долгой работы он может и закончиться...


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

Всего записей: 3179 | Зарегистр. 09-02-2003 | Отправлено: 20:16 18-11-2018
YuS_2



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

Цитата:
В целом есть решение в виде exit'a после паузы, но мне кажется это больше костыль, чем правильное решение.


Код:
Команда CALL допускает использование меток в качестве
адресата вызова. Применяется следующий синтаксис:
 
    CALL :метка аргументы
 
При вызове создается новый контекст текущего пакетного файла
с заданными аргументами, и управление передается на инструкцию,
расположенную сразу после метки.  Для выхода из такого
пакетного файла необходимо дважды достичь его конца.  Первый
выход возвращает управление на инструкцию, расположенную
сразу после строки CALL, а второй выход завершает выполнение
пакетного файла.

то бишь, правильный вызов call должен быть оформлен примерно так:

Код:
call :mark
 
rem здесь либо выход из скрипта exit, либо прыжок через блок кода, вызываемого по call
goto next
 
:mark
rem тут блок кода для выполнения по вызову call
exit /b
 
:next
rem продолжение скрипта...

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 20:23 18-11-2018
Baltazar500



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Smitis, YuS_2, спасибо за разъяснения, буду разбираться )))

Всего записей: 2080 | Зарегистр. 19-09-2011 | Отправлено: 20:26 18-11-2018 | Исправлено: Baltazar500, 20:28 18-11-2018
YuS_2



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

Цитата:
спасибо за разъяснения

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

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 20:37 18-11-2018
Smitis



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

Код:
@echo off
set "i=0"
:loop
set /a i=i+1
echo %i%
call :loop


Цитата:
****               ПРЕВЫШЕНИЕ  РАЗМЕРОВ  СТЕКА                ****
****      ПРИ  ВЫПОЛНЕНИИ  РЕКУРСИИ  В  ПАКЕТНОМ  РЕЖИМЕ      ****
Глубина рекурсии=339, Использование стека=90 проц.
****              ПАКЕТНАЯ   ОБРАБОТКА  ПРЕРВАНА              ****


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

Всего записей: 3179 | Зарегистр. 09-02-2003 | Отправлено: 23:45 18-11-2018 | Исправлено: Smitis, 23:46 18-11-2018
harpy



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Smitis
логичнее было-бы вместо call :loop использовать goto :loop

Всего записей: 1387 | Зарегистр. 26-01-2006 | Отправлено: 00:16 19-11-2018
Smitis



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


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

Всего записей: 3179 | Зарегистр. 09-02-2003 | Отправлено: 00:30 19-11-2018
iNNOKENTIY21



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

Цитата:
Как бы в powershell, получить direct link с sourceforge.net, яндекс.диск, кто нибудь подобное делал или встречал на просторах?

Для яндекс.диск есть api Операции над опубликованными файлами и папками — Технологии Яндекса им и воспользуюсь. Всем спасибо.

Всего записей: 3504 | Зарегистр. 16-08-2012 | Отправлено: 07:10 19-11-2018
LevT



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21
.NET API есть и в вот этом десктопном софте
 
Для самообразования более чёткий проект с яндексом, это да.
 
Зато для глобального решения целого класса проблем - стоило бы научиться управлять из повершел агентом, созданном этой штукой
А для начала разобраться в ней на уровне юзера

Всего записей: 17126 | Зарегистр. 14-10-2001 | Отправлено: 09:38 19-11-2018 | Исправлено: LevT, 09:38 19-11-2018
farag



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
https://gist.github.com/josy1024/5cca8a66bfdefb12abff1721ff44f35f
 
Нашел забавный скрипт по переназначению папок типа "Загрузки" и "Документы". После прогона выяснилось, что, вроде, папка "Загрузки" сменилась на указанную, но вот по пути %userprofile% в свойствах ярлыка "Загрузки" все равно указывается папка по умолчанию. И иконка смененной папки не стала со синей стрелкой.

Всего записей: 2474 | Зарегистр. 27-07-2009 | Отправлено: 11:12 19-11-2018
iNNOKENTIY21



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

Цитата:
.NET API есть и в вот этом десктопном софте

Зачем мне это, да еще варёз. .NET API мне совсем не нужен, мне нужен REST API к определённым ресурсам.

Цитата:
Зато для глобального решения целого класса проблем

Я не решаю ни глобальные проблемы ни их целые классы.

Цитата:
стоило бы научиться управлять из повершел агентом, созданном этой штукой
А для начала разобраться в ней на уровне юзера

Не учите меня жить, лучше помогите материально ©
 
Но я вам не запрещаю, осваивайте эту штуку
Как освоите, милости просим с примером, для озвученной выше задачи по я.диску.
 
А я свои задачки, уже порешал, примерно так:
кусочек Get-YndexDiskMetaInfo

Всего записей: 3504 | Зарегистр. 16-08-2012 | Отправлено: 11:19 19-11-2018
LevT



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21
Вы зря приняли на свой счёт, да ещё обиделись.
Я просто "оставил это здесь"

Всего записей: 17126 | Зарегистр. 14-10-2001 | Отправлено: 11:46 19-11-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