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

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



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

Цитата:
Вы извращений ещё не видели

да уж повидал немного... такшта
 

Цитата:
%i %k %l
...
1 3 %l

апатамушта аглицкую азбуку необходимо освежить в памяти

Код:
i-j-k

 

Цитата:
пытаюсь врубить/врубить

это как?
 

Цитата:
Синтаксис верный и консоль из под админа

дык, этаж виндоус... тут всё возможно, в смысле работать должно... но не работает
 
Адаптеры можно пощелкать через тот же wmi, но экспериментировать с XP, желания нет абсолютно.
Пробуйте:

Код:
@echo off
setlocal enabledelayedexpansion
set i=0
set n=1
 
set m=20 &: Предполагаемое число адаптеров
 
rem Собственно, создаем массив:
for /f "delims=" %%a in ('
    wmic path win32_networkadapter where physicaladapter^=true get ^
    netenabled^,deviceid^,name /value^|findstr /i "deviceid netenabled name"
') do set /a i+=1&set "var!n!%%a"&if !i! equ 3 (set/a i=0&set/a n+=1)
 
rem Выключаем адаптер, если включен:
for /l %%i in (1,1,%m%) do (
    if defined var%%iDeviceID (
        call set "tmp=%%var%%iNetEnabled%%"
        call set "ID=%%var%%iDeviceID%%"
        if "!tmp!"=="TRUE" (
            wmic path win32_networkadapter where deviceid=!ID! call disable
        )
    )
)
 
timeout /t 10
 
rem Восстанавливаем предыдущее состояние изначально включенных адаптеров
for /l %%i in (1,1,%m%) do (
    if defined var%%iDeviceID (
        call set "tmp=%%var%%iNetEnabled%%"
        call set "ID=%%var%%iDeviceID%%"
        if "!tmp!"=="TRUE" (
            wmic path win32_networkadapter where deviceid=!ID! call enable
        )
    )
)
endlocal
pause&exit /b

 
Под XP, скорее всего, не взлетит...ибо, если мне не изменяет мой склероз, параметра physicaladapter, в классе win32_networkadapter, под XP нет...

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 12:05 13-09-2018 | Исправлено: YuS_2, 12:10 13-09-2018
xerpal



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

Цитата:
1. Как будем искать подкаталоги ggg? Это будет перечень каталогов или есть один корневой, в котором находятся эти

Один корневой. Просто скрипт в корень.  

Цитата:
2. Допустим находим каталог "A", в котором есть подкаталог "ggg".  
а) Чистим весь каталог "A" (удаляем все файлы и подкаталоги), кроме подкаталога "ggg"?  
б) Переносим все файлы и каталоги из подкаталога "ggg" в каталог "A", затем удаляем подкаталог "ggg"?  Так?

Да. Только пискать каталог А не надо, все подряд каталоги проверяем в корневом. Без вложенности.  

Цитата:
3. На powershell устроит решение? (сам код можно завернуть в батник, если что)

Если можно завернуть, то ок

Цитата:
Вот, предварительное решение, более-менее универсальное:  powershell

Как это завернуть в bat ? А иначе ругань какая-то идёт
   
И никакие get-help в CMD не помогают
Windows 7 64

Всего записей: 1584 | Зарегистр. 08-10-2011 | Отправлено: 12:47 13-09-2018 | Исправлено: xerpal, 12:54 13-09-2018
YuS_2



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

Цитата:
Windows 7 64

Надо просто разрешить выполнение неподписанных скриптов.
"get-help about_signing"  - вводить надо не в cmd, а в консоли powershell, причем, собственно, изменение политики, надо выполнять в консоли powershell, запущенной от имени админа... вот так:

Код:
set-executionpolicy remotesigned

а в батник завернуть, даже без изменения политики, вообще просто:

Код:
powershell -ex bypass -f ".\script.ps1"

и положить его рядом со скриптом.
 
ну и заодно, лучше сразу обновить powershell до актуальной версии 5.1, пригодится.
 

Цитата:
Без вложенности.

Это надо проверять, вроде бы я там делал с рекурсией, т.е. проверяются все вложенные каталоги... но поправить легко, вечером гляну.
 
Добавлено:
Да, вот в этой строке:

Код:
dir $fld -rec -inc 'ggg' -dir|%{

Надо удалить параметр -rec
И кстати, в переменной $fld можно указывать несколько каталогов с абсолютным путем.

Код:
$fld = 'd:\test','e:\test1','f:\name\test2' # и т.д.

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 13:59 13-09-2018 | Исправлено: YuS_2, 14:31 13-09-2018
xerpal



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

Цитата:
а в батник завернуть, даже без изменения политики, вообще просто

Да, помогло запустить. Но ругается на ошибку в коде
   
 
Код изначальный

Код:
 
$fld = 'test'  
 dir $fld -rec -inc 'ggg' -dir|%{  
     dir (gi $_.fullname).parent.fullname -exc 'ggg'|%{del $_.fullname -rec -force -whatif}  
     dir $_.fullname|%{move $_.fullname (gi $_.directoryname).parent.fullname -whatif}  
     del $_.fullname -rec -force -whatif  
 }
 

Всего записей: 1584 | Зарегистр. 08-10-2011 | Отправлено: 14:09 13-09-2018
YuS_2



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

Цитата:
Но ругается на ошибку в коде

Да, на версии powershell 2.0, такой параметр ещё не работал...
 13-09-2018

Цитата:
заодно, лучше сразу обновить powershell до актуальной версии 5.1, пригодится.

 
Если без обновления, то:

Код:
 
...
dir $fld -inc 'ggg'|?{!$_.PSIsContainer}|%{
...
 

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 14:24 13-09-2018 | Исправлено: YuS_2, 14:38 13-09-2018
xerpal



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

Цитата:
заодно, лучше сразу обновить powershell до актуальной версии 5.1, пригодится.

Да, вечерком установлю, проверю, спасибо
 
Добавлено:
YuS_2

Цитата:
Если без обновления

Нет, так не работает. Ошибок нет, но и результата ноль

Код:
$fld = 'test'  
dir $fld -inc 'ggg'|?{!$_.PSIsContainer}|%{
     dir (gi $_.fullname).parent.fullname -exc 'ggg'|%{del $_.fullname -rec -force -whatif}  
     dir $_.fullname|%{move $_.fullname (gi $_.directoryname).parent.fullname -whatif}  
     del $_.fullname -rec -force -whatif  
 }

Всего записей: 1584 | Зарегистр. 08-10-2011 | Отправлено: 14:39 13-09-2018 | Исправлено: xerpal, 14:42 13-09-2018
Baltazar500



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

Всего записей: 2080 | Зарегистр. 19-09-2011 | Отправлено: 16:05 13-09-2018 | Исправлено: Baltazar500, 16:07 13-09-2018
xerpal



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_2
В общем bat-никами допилили всем форумом в теме про батники. Спасибо за участие.

Всего записей: 1584 | Зарегистр. 08-10-2011 | Отправлено: 16:52 13-09-2018
YuS_2



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

Цитата:
не работает. Ошибок нет, но и результата ноль

Вот так должно работать:

Код:
$fld = 'd:\test','e:\test1','f:\name\test2' # и т.д.
dir $fld -filt 'ggg'|?{$_.PSIsContainer}|%{  
     dir (gi $_.fullname).parent.fullname -exc 'ggg'|%{del $_.fullname -rec -force -whatif}  
     dir $_.fullname|%{move $_.fullname (gi $_.directoryname).parent.fullname -whatif}  
     del $_.fullname -rec -force -whatif  
 }

однако, такой код не имеет большого смысла, т.к. Вам необходимо указывать массив каталогов, где заведомо есть каталог, содержащий в названии "ggg", в отличии от варианта с рекурсией, где достаточно указать... да хоть корень диска...
но powershell, всё же, обновите...

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 17:39 13-09-2018 | Исправлено: YuS_2, 17:45 13-09-2018
xerpal



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
У нас плоский каталог безо всякой вложенности, то есть хватает и имени одной папки.  
 
Решилось вот таким кодом - два файла  

Всего записей: 1584 | Зарегистр. 08-10-2011 | Отправлено: 20:04 13-09-2018
YuS_2



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

Цитата:
У нас плоский каталог безо всякой вложенности, то есть хватает и имени одной папки.

Ну так это тоже не представляет сложностей.
Достаточно указать корневой каталог для всех этих каталогов одного уровня ("aaa", "bbb","ccc"...,"xxx"):

Код:
$fld = 'd:\test'
$flt = 'ggg'
dir (dir $fld|?{$_.psiscontainer}).fullname -filt $flt|%{
    dir (gi $_.fullname).parent.fullname -exc $flt|%{del $_.fullname -rec -force -whatif}
    dir $_.fullname|%{move $_.fullname (gi $_.directoryname).parent.fullname -whatif}
    del $_.fullname -rec -force -whatif
}
 

и запускать скрипт откуда угодно.

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 20:26 13-09-2018 | Исправлено: YuS_2, 20:27 13-09-2018
xerpal



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

Цитата:
и запускать скрипт откуда угодно.

Вот только с батниками удобнее ((

Всего записей: 1584 | Зарегистр. 08-10-2011 | Отправлено: 06:00 14-09-2018
YuS_2



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

Цитата:
только с батниками удобнее

Чем удобнее?
Вот, например, батник:
run.bat (кодировка cp866)

Код:
<# ::
@echo off
powershell -ex bypass -c "&{[scriptblock]::create((gc '%~f0' -enc OEM) -join [char]10).invoke()}"
pause&exit /b
#>
$fld = 'd:\test'
$flt = 'ggg'
dir (dir $fld|?{$_.psiscontainer}).fullname -filt $flt|%{
    dir (gi $_.fullname).parent.fullname -exc $flt|%{del $_.fullname -rec -force -whatif}
    dir $_.fullname|%{move $_.fullname (gi $_.directoryname).parent.fullname -whatif}
    del $_.fullname -rec -force -whatif
}

- с кодом powershell. А можно вообще исполняемый файл .exe скомпилировать... без всяких внешних компиляторов, на которые антивирусы в стойку поднимаются...
К тому же у powershell, скорость обработки повыше будет, причем, чаще всего, значительно выше и проблем со спецсимволами таких нет, как в чистом cmd. Да и возможностей гораздо больше... хотя, в этой именно задаче, выбор инструмента - скорее, дело вкуса.

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 07:42 14-09-2018 | Исправлено: YuS_2, 07:48 14-09-2018
NIKZZZZ



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

Цитата:
А можно вообще исполняемый файл .exe скомпилировать... без всяких внешних компиляторов

А толку?
Без установленного powershell нужной версии такой exe'шник бесполезен, скорее даже вреден, он будет работать только в той среде, в которой писался.
Я ничего не имею против powershell, возможностей много, но универсальности никакой, только если писать что-то под себя.
И мне не очень нравится идеология - для работы простейшей программы, которая "умножает 2 на два", нужно приобретать компьютер последнего поколения, ставить последнюю версию windows, докачивать в ручную недостающие модули, разбираться с правами, настраивать систему и т.п.
Простейший батник, со всеми его недостатками, решает задачу в лоб.  
 
 

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



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

Цитата:
для работы простейшей программы, которая "умножает 2 на два", нужно приобретать компьютер последнего поколения,  

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

Всего записей: 17126 | Зарегистр. 14-10-2001 | Отправлено: 10:46 14-09-2018
YuS_2



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

Цитата:
А толку?

Аргумент был:

Цитата:
с батниками удобнее

- Вот, на этом основании и толк...

Цитата:
Без установленного powershell нужной версии такой exe'шник бесполезен, скорее даже вреден, он будет работать только в той среде, в которой писался.

Это неправда (про вредность). И powershell присутствует в системах по умолчанию... в современных системах, начиная с win 7. Да, в системах поросших мхом, если требуется функциональность, придется установить его, причем в совсем заросших, установить не всё получится, но это естественно...

Цитата:
И мне не очень нравится идеология - для работы простейшей программы, которая "умножает 2 на два", нужно приобретать компьютер последнего поколения, ставить последнюю версию windows, докачивать в ручную недостающие модули, разбираться с правами, настраивать систему и т.п.

Да ладно!? Где это такие требования? Для какой программы? А может быть, было бы лучше накачать скриптов из интернета и запускать их со всеми правами? Вот уж антивирусные компании без работы не остались бы, это точно. Тут скрипты на wsh (например, простой генератор шестнадцатеричных чисел .js), ни за что ни про что попадают в разряд вирусов - две недели (!!!) с техподдержкой антивирусника переписывался (не хотели признавать за баг), через три только исправили... но это отдельная история.
А на счет 2*2 - так вот в powershell это, как раз, именно так и решается, а в cmd оно как решается?
Дроби, вещественные числа, логарифмы, округления и т.д., не говоря уже о какой-то более сложной математике, регулярные выражения, нормальная обработка текста, xml и т.д., и т.п. ... есть это всё в cmd? А если ещё вспомнить, что в cmd очень жесткие ограничения на размер строки, переменных, размер чисел и т.д. ...
 

Цитата:
Простейший батник, со всеми его недостатками, решает задачу в лоб.

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

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



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

Цитата:
А работать - дело машины, не человека.  

То есть Вы безработный бомж?
 

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



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ну, опять и снова занялись сравнением... и понеслось (
Переезжаем во флейм
А то выбора не оставили и тему придется прикрыть на неделю, спасибо за понимание.

Всего записей: 11062 | Зарегистр. 12-10-2001 | Отправлено: 11:13 14-09-2018
Smitis



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

Цитата:
написания простейшей программы, которая умножает 2.2 на 2.2 не хватает даже Ваших мозгов и желания  

Операции с фиксированной точкой, придуманные задолго до Вашего рождения, решают эту проблему.
 
П.С.
И это не флейм. Это технология, которую можно использовать и в батниках.


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

Всего записей: 3179 | Зарегистр. 09-02-2003 | Отправлено: 01:11 15-09-2018
KLASS



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Smitis
Флейм, если неизбежно нужно "тыкать" этим
Цитата:
придуманные задолго до Вашего рождения


Всего записей: 11062 | Зарегистр. 12-10-2001 | Отправлено: 08:00 15-09-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