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

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

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

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

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



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
farag
 
Ну да, и не забывать что точечная нотация извлекает скалярное свойство - то есть эквивалентна | Select -ExpandProperty DriveLetter
 
Может так статься, что возможно оттянуть этот момент, продолжая "гнутие труб" (вычисления над коллекциями объектов).

Всего записей: 17740 | Зарегистр. 14-10-2001 | Отправлено: 17:10 31-07-2018 | Исправлено: LevT, 17:24 31-07-2018
NIKZZZZ



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

Цитата:
передаю батнику путь до каталога, который содержит восклицательные знаки и батник их игнорирует

Это довольно известная проблема батников, они не любят спец. символы.
Скорее всего у Вас используется setlocal enabledelayedexpansion , который и вызывает эту проблему.
Короткие имена использовать не рекомендую, их поддержка может быть отключена.
Приведите часть скрипта, думаю проблему с восклицательным знаком легко решить.
 
Добавлено:
Еще для красивостей, можете воспользоваться моей утилитой.

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



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

Цитата:
Скорее всего у Вас используется setlocal enabledelayedexpansion , который и вызывает эту проблему.
Да, в скрипте был оный. С недавних пор стал включать его во все свои батники автоматом т.к узнал, что в batch, в отличии от никсового баша переменные в скрипте экспортируются глобально по умолчанию. А о вывертах setlocal enabledelayedexpansion со спецсимволами был не в курсе и вероятно, наступил на грабли. Попробую без него. Спасибо.
Цитата:
Еще для красивостей, можете воспользоваться моей утилитой.
Хм, интересно - погляжу )))

Всего записей: 2309 | Зарегистр. 19-09-2011 | Отправлено: 01:07 01-08-2018
YuS_2



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

Цитата:
А о вывертах setlocal

Дык, всё можно подсмотреть:

Код:
setlocal /?

хотя с наскока, да ещё впервые, там может не всё понятным оказаться... но что непонятно, можно и спросить ведь.

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 09:40 01-08-2018
Smitis



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

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

Можно использовать для ограничения видимости переменных связку setlocal (без enabledelayedexpansion) / endlocal


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

Всего записей: 3452 | Зарегистр. 09-02-2003 | Отправлено: 10:25 01-08-2018
NIKZZZZ



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

Цитата:
хотя с наскока, да ещё впервые, там может не всё понятным оказаться...

Это уж точно, хелпик конечно обязательно почитать нужно, но пока все не пройдешь на своем опыте, лучше не пользоваться, уж очень там много тонкостей, которые нигде не описаны.
Тем более, в большинстве случаев, можно обойтись без использования setlocal, goto и call  в помощь, это сильно сократит время на отлавнивание не явных ошибок.  

Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 10:30 01-08-2018
farag



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

Код:
 
(Get-Disk | Where-Object BusType -ne USB | Get-Partition | Get-Volume).DriveLetter | ForEach-Object {$_ + ':'}
 

выдает

Код:
 
D:
:
C:
:
 

а

Код:
 
(Get-Disk | Where-Object BusType -eq USB | Get-Partition | Get-Volume).DriveLetter | ForEach-Object {$_ + ':'}
 


Код:
 
E:
F:
 

Мне вообще надо получить буквы дисков, не подключенных по USB, вида D:.

Всего записей: 2522 | Зарегистр. 27-07-2009 | Отправлено: 10:42 02-08-2018
Smitis



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
farag
Видимо, не все диски имею букву (служебные разделы)


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

Всего записей: 3452 | Зарегистр. 09-02-2003 | Отправлено: 10:58 02-08-2018
LevT



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
farag
да, это из-за пустых букв
 
и лучше без конкретной надобности (обычно наступающей в самом конце трубы) не оперировать со скалярными строками
 

Код:
 
$volumes = Get-Disk | Where -Property BusType -ne USB | Get-Partition | Get-Volume  
$psdrives = Get-PSDrive -PSProvider FileSystem -Name $volumes.DriveLetter
$psdrives.Root
 

 
помимо Root (который ведь не самоцель? зачем-то нужен дальше), в объектах обычно есть много других свойств, которые могут пригодиться.

Всего записей: 17740 | Зарегистр. 14-10-2001 | Отправлено: 12:12 02-08-2018 | Исправлено: LevT, 14:22 02-08-2018
farag



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
LevT
Get-PSDrive : Не удается проверить аргумент для параметра "Name". Аргумент пуст, имеет значение NULL, либо элемент коллекции аргументов имеет значение NULL. Предоставьте коллекцию без значений NULL и повторите выполнение команды.
строка:2 знак:54
+ ... rives = Get-PSDrive -PSProvider FileSystem -Name $volumes.DriveLetter

Всего записей: 2522 | Зарегистр. 27-07-2009 | Отправлено: 21:10 02-08-2018
LevT



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

Код:
 
$volumes = Get-Disk | Where -Property BusType -ne USB | Get-Partition | Get-Volume
$psdrives = $volumes |  Where {$_.DriveLetter -ne $null} |  
                                              Select @{N='Name';E={$_.DriveLetter}} |  
                                                                                                       Get-PSDrive           #принимает параметр -Name ByPropertyName
 

Всего записей: 17740 | Зарегистр. 14-10-2001 | Отправлено: 21:59 02-08-2018 | Исправлено: LevT, 22:06 02-08-2018
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Чего только не придумают
Почему не:
[system.io.driveinfo]::GetDrives()
Перечисление DriveType (System.IO)
Свойство DriveInfo.IsReady (System.IO)
готовый же объект и всё, что надо, вроде есть.. [system.io.driveinfo]::GetDrives() | gm или, чего то, не хватает?

Всего записей: 3650 | Зарегистр. 16-08-2012 | Отправлено: 23:59 02-08-2018
LevT



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21
Потому что я толком не знаю дотнета - и даже не отношу это знание к своим первоочередным целям.
"Трубы гнуть и сочетать" это методология: куда надёжнее полузнания дотнета.
 
Иногда интересны именно тома без букв и прочее такое.  
Из нативного PS понятно как с ними обращаться, а дотнет надо рыть без всякой гарантии успеха.
 

Всего записей: 17740 | Зарегистр. 14-10-2001 | Отправлено: 00:12 03-08-2018 | Исправлено: LevT, 00:35 03-08-2018
Smitis



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

Цитата:
Почему не:


Исключительно из религиозных соображений.

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

Всего записей: 3452 | Зарегистр. 09-02-2003 | Отправлено: 09:35 03-08-2018
LevT



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

С дотнетом - чудесный ответ на вопрос: на чуть изменвшийся вопрос ответ можно искать гораздо дольше.
Нативный повершел - методология:
 
1) Владея ею, можно получить ответ на любой вопрос с использованием знакомых терминов за константное время.
2) Примеры с трубами являются наглядными обучающими пособиями - и следующие вопросы могут быть сняты так и незаданными.  

Всего записей: 17740 | Зарегистр. 14-10-2001 | Отправлено: 10:13 03-08-2018 | Исправлено: LevT, 10:18 03-08-2018
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Smitis
Секта авторитарная
 
LevT
System.IO.DirectoryInfo (привет get-item для директории) использовать кошерно, system.string и прочие типы .net, а system.io.driveinfo нельзя? Это тот же объект, для труб.
Вот так взять и написать командлет, тем более объект уже готовый, только оформить, автосправку скопипастить c msdn/дополнить. И будет gcm, man, gm и так пашет, в общем как религия велит
 
Про типы в справке везде и про входящие и исходящие. Автодополнение в командной строке сделали, ctrl+space работает. Набрал [system.io. нажал ctrl+space и изучай
Работа с типами — неотъемлемая часть powershell. Не зря такие возможности в powershell, все оформить в командлеты не могут, взять в свои руки.

Всего записей: 3650 | Зарегистр. 16-08-2012 | Отправлено: 10:36 03-08-2018
Smitis



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

Цитата:
все оформить в командлеты не могут


Это же сектанты, Вы же видите. Им "Великий Чувак" сказал, что дотнет низя, Значит System.String низя. А просто string он разрешил, пока никто не видит, что это System.String. Поэтому сектанты действительно будут сидеть и ждать, пока кто-то напишет модуль. Ведь они не будут смотреть текст в модуле и не увидят того, что им видеть запрещено, а раз не видят, значит модуль использовать можно. Такая вот извращённая логика.
 
Сорри за оффтопик, но постоянно продвигаемая идея "это нельзя, потому что я сказал нельзя" противоречит самому принципу использования скриптовых языков и PS в частности.
Поэтому я и предлагаю модератору ввести ограничения в тему:
1. Запретить обсуждение правильности или неправильности использования средств скриптовых языков и стилей (правильности) написания скриптов, так как это потенциальные "религиозные воины".
2. Запретить какое-либо использовать унизительное (расистское) деление пользователей по опыту или знаниям или сфере деятельности (мастера/подмастерья/рабы/домохозяйки/дауншифтеры и т.п.)
 
Извиняюсь, что пишу здесь, а не в соответствующей теме, так как ту тему не все читают. Остальное обсуждение предлагаю перенести туда.

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

Всего записей: 3452 | Зарегистр. 09-02-2003 | Отправлено: 11:09 03-08-2018 | Исправлено: Smitis, 11:21 03-08-2018
KLASS



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

Цитата:
Извиняюсь, что пишу здесь

Исполнение обозначенных пунктов - очевидно (уже все большие), без каких либо обсуждений,
отсюда выписываю бан на сутки обоим, чтобы не обидно было:
LevT-за постоянное нарушение правил, в том числе и из указанных пунктов
Smitis-за попытки в теме объяснить первому, что так делать низя, при этом, сопровождая те попытки стёбом.
Обоим: переходим стебаться в ПМ, там можно больше и, как то... по-взрослому будет выглядеть.

Всего записей: 11450 | Зарегистр. 12-10-2001 | Отправлено: 12:01 03-08-2018
Falcon99



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Прошу помощи, нужен скрипт для переименования файлов.
К нам периодически поступают файлы docx, но с расширением doc. Поэтому необходим cmd файл для переименования.
Нечто похожее на такое:

Код:
@chcp 1251
:loop
@IF "%~1" == "" chcp 866 & EXIT /b
rename "%~1" "%~1"x
@shift
@GOTO :loop  

 
Но необходимо добавить проверки для переименования:
- расширение файла doc
- первые два символа в содержимом файла "PK"
для того чтобы не переименовывались ненужные файлы.

Всего записей: 607 | Зарегистр. 12-10-2005 | Отправлено: 08:09 06-08-2018
farag



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

Цитата:
docx, но с расширением doc

То есть люди специально переименовывают файлы обратно в doc?

Всего записей: 2522 | Зарегистр. 27-07-2009 | Отправлено: 12:28 06-08-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 226 227 228 229 230

Компьютерный форум 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