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

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

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



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

Цитата:
Необходимо добавить функционал предварительной проверки существования  данной папки


Код:
set "cat=c:\test"
if exist "%cat%\" (echo Ура, она крутится!) else (echo Будем раскручивать!)

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 12:35 18-07-2018
ZeroCooool



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

Цитата:
А зачем?  
Попытка создать уже существующую папку будет просто проигнорирована и ничего при этом удалено не будет.
 

 
Не игнорируется. Заменяет все подпапки удаляя файлы ((
 
Добавлено:
YuS_2
 

Цитата:
Код:
set "cat=c:\test"  
if exist "%cat%\" (echo Ура, она крутится!) else (echo Будем раскручивать!)

 
Вроде как да, но дело в том что основной каталог ежемесячно меняет название в соответствии с датой.

Всего записей: 29 | Зарегистр. 27-08-2007 | Отправлено: 12:47 18-07-2018
YuS_2



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

Цитата:
дело в том что основной каталог ежемесячно меняет название в соответствии с датой.

Так опишите в чем проблема? Вопрос был о проверке существования каталога... или в чем проблема?

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



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

Цитата:
Не игнорируется. Заменяет все подпапки удаляя файлы ((  

Вот простейший тест, подтверждающий, что это не так.

Код:
@echo off
cd /d "%~dp0"
::Создаем каталоги и файлы
rd /s /q 1
md 1
>1\test1.txt echo.test1
md 1\2
>1\2\test2.txt echo.test2
dir  /s 1\*
pause
::Создаем каталоги повторно
md 1
md 1\2
dir  /s 1\*
pause
rd /s /q 1


Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 13:22 18-07-2018 | Исправлено: NIKZZZZ, 13:24 18-07-2018
farag



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Имеется 424 svg-файла. Как отправить все их на типа печать через Adobe PDF, чтобы сделать из них PDF-файлы, через консоль?..

Всего записей: 2522 | Зарегистр. 27-07-2009 | Отправлено: 12:07 20-07-2018
YuS_2



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

Цитата:
чтобы сделать из них PDF-файлы

Вот тут почитай: http://wiki.inkscape.org/wiki/index.php/Tools#Convert_to.2Ffrom_SVG
может быть, что-то пригодится...

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 14:25 20-07-2018
farag



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

Цитата:
может быть, что-то пригодится...

Спасибо. Через Photoshop состряпал единый файл. Купил, называется, электронную книгу...
 
Добавлено:

Код:
 
$OfficePath = (@("C:","D:","E:","H:","I:") | ForEach-Object {Resolve-Path $_\Программы\Прочее\Office_task.bat -ErrorAction SilentlyContinue}).Path
$XmlPath = (@("C:","D:","E:","H:","I:") | ForEach-Object {Resolve-Path $_\Программы\Прочее\xml\Office.xml -ErrorAction SilentlyContinue}).Path
 
$OfficePath = $OfficePath | Select-Object -First 1
$XmlPath = $XmlPath | Select-Object -First 1
 
Copy-Item $OfficePath C:\Users -Force
Register-ScheduledTask -Xml (Get-Content $XmlPath | Out-String) -TaskName "Office" -Force
 

 
Можно как-то упростить код? Мне надо, чтобы скрипт проходился по всем дискам в поисках файл, копировал ПЕРВЫЙ нашедшийся, затем опять же по всем дискам искал xml-файл и регистрировал первый нашедшийся.

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



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

Код:
 
":" ,"C:","D:" |          #Пустые буквы сюда тоже можно навалять из (Get-Volume).DriveLetter
        Join-Path -ChildPath $childpath -Resolve -ErrorAction SilentlyContinue  |
             Select-Object -First 1
 

 
 
Добавлено:
 

Код:
 
 
# filter это то же самое что функция, при условии что она состоит из одного только блока PROCESS
 
filter Get-FirstResolvedPath {
        "C:","D:",":"  |    
                Join-Path -ChildPath $_ -Resolve -ErrorAction SilentlyContinue |  
                        Select-Object -First 1
}
 
'Программы\Прочее\Office_task.bat' | Get-FirstResolvedPath |   Copy-Item C:\Users -Force  
 
'Программы\Прочее\xml\Office.xml' | Get-FirstResolvedPath |    #получив существующее полное имя      
                      Get-Item   |   Get-Content -Raw |                        #обращаемся к Filesystem provider за контентом сразу в виде строки
                                               Register-ScheduledTask -TaskName "Office" -Force  
 

 
последнее возможно потому, что            

Цитата:
 
    -Xml <String>
        Specifies the XML string that contains a task definition.
 
        Required?                    true
        Position?                    3
        Default value                none
        Accept pipeline input?      True (ByValue)
        Accept wildcard characters?  false
 

 

Всего записей: 17727 | Зарегистр. 14-10-2001 | Отправлено: 15:06 24-07-2018 | Исправлено: LevT, 15:54 24-07-2018
YuS_2



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

Цитата:
Можно как-то упростить код?

Не знаю, упростит ли это код, но я бы сделал через функцию, примерно так:

Код:
function get-topitem {
    begin {
        $dsk = (gwmi win32_logicaldisk|where{$_.drivetype -eq 3}).deviceid
    }
    process {
        $x=$_
        $dsk|%{(resolve-path ($_+$x) -ea 0).path}|select -fir 1
    }  
}
 
$arr='\temp\office\run.bat','\temp\xml\test.xml'
 
$arr|get-topitem|%{
    if ($_.split('.')[-1] -eq 'bat'){
        write-host copy $_
    } else {
        write-host job $_
    }
}

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 19:45 24-07-2018 | Исправлено: YuS_2, 19:46 24-07-2018
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А почему не:
Код:
(Get-PSDrive -PSProvider FileSystem).root
?

Всего записей: 3640 | Зарегистр. 16-08-2012 | Отправлено: 01:56 25-07-2018
YuS_2



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

Цитата:
А почему не:

Потому что, список будет всех корневых каталогов дисков, а не {$_.drivetype -eq 3}

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 05:06 25-07-2018 | Исправлено: YuS_2, 05:07 25-07-2018
Stone_01



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем доброго дня.
 
Подскажите пожалуйста, как правильно оформить батник для запуска интернет соединения.
Интернет на компьюетре идет по vpn, со своим логином и паролем.
 
Я нашел пример в интернете , как отключать интернет соединения.
 
@Echo Off
Rem #1
Rem - Internet - "Имя соединения"
RASDial /DisConnect
 
Нужен подобный батник, для запуска.Задача такая чтобы логин и пароль были прописаны в сам батник.

Всего записей: 352 | Зарегистр. 22-12-2017 | Отправлено: 12:57 25-07-2018
farag



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

Цитата:
навалять из (Get-Volume).DriveLetter  

Что-то не понял, как вытащить название дисков с ":\" в пути

Цитата:
Copy-Item C:\Users -Force

Как указать откуда копировать?

Всего записей: 2522 | Зарегистр. 27-07-2009 | Отправлено: 13:23 25-07-2018
YuS_2



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

Цитата:
Что-то не понял, как вытащить название дисков с ":\" в пути

get-volume - командлет из модуля Storage, т.е. в win 7 и ниже - недоступен...

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 14:42 25-07-2018
farag



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

Цитата:
т.е. в win 7 и ниже - недоступен...

Может быть, но у меня 10.

Всего записей: 2522 | Зарегистр. 27-07-2009 | Отправлено: 14:43 25-07-2018
LevT



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21
отличная подсказка, спасибо!
Но подключённые сетевые тома тоже здесь окажутся.
 
YuS_2
Не путай диски, разделы и тома.
 
Файловая система (с буквой или доступная только по ссылке) может быть сетевой или локальной (исключительно на томах).
Локальные тома могут состоять из одного или нескольких экстентов (разделов дисков).
Частый случай когда экстент один: потому тома путают с разделами.  
 
Всё это описывает "старомодную" систему хранения: в Storage Spaces иначе.
 
 
farag

Цитата:
Что-то не понял, как вытащить название дисков с ":\" в пути  

Спасибо! не проверил
 
 Get-Volume | select -expand DriveLetter  
думал, что это то же самое  
 
 

Цитата:
Как указать откуда копировать?

 
Должно прилететь из трубы
 

Цитата:
 
    -Path <String[]>
        Specifies, as a string array, the path to the items to copy.
 
        Required?                    true
        Position?                    0
        Default value                None
        Accept pipeline input?       True (ByPropertyName, ByValue)
        Accept wildcard characters?  false
 


Всего записей: 17727 | Зарегистр. 14-10-2001 | Отправлено: 14:45 25-07-2018 | Исправлено: LevT, 14:49 25-07-2018
farag



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

Цитата:
Get-Volume | select -expand DriveLetter  

Что-то я уже окончательно запутался.
 

Код:
 
filter Get-FirstResolvedPath
{
    Get-Volume | select -expand DriveLetter | Join-Path -ChildPath $_ -Resolve -ErrorAction SilentlyContinue | Select-Object -First 1
}  
'Программы\Прочее\Office_task.bat' | Get-FirstResolvedPath | Copy-Item C:\Users -Force
'Программы\Прочее\xml\Office.xml' | Get-FirstResolvedPath | Get-Item | Get-Content -Raw | Register-ScheduledTask -TaskName "Office" -Force
 

Так выдает ошибку. Очевидно, что где-то у меня неправильно.

Всего записей: 2522 | Зарегистр. 27-07-2009 | Отправлено: 14:51 25-07-2018
LevT



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
farag
 
1)Что именно выдаёт ошибку-то?
 
2) Я опять облажался: PS достаточно умный, чтобы пустые буквы не отбирать при селекте.  
 
Отобрать их можно иначе (Get-Volume).Where({! $_.DriveLetter}) или | Where-Object  DriveLetter -eq $null
Ну или отбирать не одно свойство тома, а ещё хотя б одно непустое.
 
Так что две записи (с точкой или select -expand) эквивалентны, и обе отфильтровывают объекты с нулевым значением свойства.

Всего записей: 17727 | Зарегистр. 14-10-2001 | Отправлено: 15:07 25-07-2018 | Исправлено: LevT, 15:34 25-07-2018
farag



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

Код:
 
Join-Path : Не удается найти путь "C:\Windows\system32\D\Программы\Прочее\Office_task.bat", так как он не существует.
строка:4 знак:47
+ ... select -expand DriveLetter | Join-Path -ChildPath $_ -Resolve | Selec ...
+                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (C:\Windows\syst...Office_task.bat:String) [Join-Path], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.JoinPathCommand
 
Join-Path : Не удается найти путь "C:\Windows\system32\C\Программы\Прочее\Office_task.bat", так как он не существует.
строка:4 знак:47
+ ... select -expand DriveLetter | Join-Path -ChildPath $_ -Resolve | Selec ...
+                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (C:\Windows\syst...Office_task.bat:String) [Join-Path], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.JoinPathCommand
 
Join-Path : Не удается найти путь "C:\Windows\system32\D\Программы\Прочее\xml\Office.xml", так как он не существует.
строка:4 знак:47
+ ... select -expand DriveLetter | Join-Path -ChildPath $_ -Resolve | Selec ...
+                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (C:\Windows\syst...\xml\Office.xml:String) [Join-Path], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.JoinPathCommand
 
Join-Path : Не удается найти путь "C:\Windows\system32\C\Программы\Прочее\xml\Office.xml", так как он не существует.
строка:4 знак:47
+ ... select -expand DriveLetter | Join-Path -ChildPath $_ -Resolve | Selec ...
+                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (C:\Windows\syst...\xml\Office.xml:String) [Join-Path], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.JoinPathCommand
 

Всего записей: 2522 | Зарегистр. 27-07-2009 | Отправлено: 15:11 25-07-2018
LevT



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
farag
Учимся отлаживать свою писанину
 
первое что я вижу это  
 
   $child = 'windows'
   Get-Volume | select -expand DriveLetter | Join-Path -ChildPath $child  
 

Цитата:
 
PS C:\Windows\system32>  
   $child = 'windows'
   Get-Volume | select -expand DriveLetter | Join-Path -ChildPath $child  
 
 
C\windows
G\windows
H\windows
D\windows
J\windows
K\windows
L\windows
F\windows
 

 
Следующий ход очевиден, не?

Всего записей: 17727 | Зарегистр. 14-10-2001 | Отправлено: 15:30 25-07-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