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

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

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



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

Цитата:
Почему орет, что не может переписать, ведь -Force имеется?

Пример под номером 4

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 18:27 18-01-2021 | Исправлено: YuS 2, 18:30 18-01-2021
farag



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
test.psm1
test.psd1
test.ps1
Модуль можно запустить, исполнив test.ps1, и выполнятся функции function1, function2 и Hello. Хотелось бы, чтобы можно было указывать, какие именно надо выполнить функции:

Код:
 
.\test.ps1 -Function "function1 -Enable", "function2 -Minimal"
 

Но не получается добавить аргумент у функции. Работает лишь без него:

Код:
 
.\test.ps1 -Function function1, function2
 

Всего записей: 2476 | Зарегистр. 27-07-2009 | Отправлено: 18:34 18-01-2021
farag



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS 2
Я это видел. А чем их пример отличается от того, что я ввожу?
Проблема в том, что мне надо сохранить структуру папок, а не взять абсолютно все файлы и переместить их кучей в другую папку.
Так тоже очевидно не сработает, так как все файлы опять в кучу копируются.

Код:
 
Get-ChildItem -LiteralPath "D:\Downloads\Metro\UPMetroSkin-master\Unofficial 4.x Patch\Main Files [Install First]" -Recurse -Force | ForEach-Object -Process {
    Move-Item -LiteralPath $_.FullName -Destination "D:\Downloads\Metro\metro-for-steam-4.4" -Force
}
 

Всего записей: 2476 | Зарегистр. 27-07-2009 | Отправлено: 23:09 18-01-2021 | Исправлено: farag, 23:42 18-01-2021
YuS 2



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

Цитата:
А чем их пример отличается от того, что я ввожу?

Да ничем... там просто есть описание того, с чем ты столкнулся... и про force тоже есть...
 

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

Ну, тогда и задачу надо описывать, а не задавать вопросы о готовом решении (в исходном вопросе нет ни слова о сохранении структуры )... это ведь распространенная ошибка новичков, но ты-то почему так делаешь?
 
У меня тут в "загашниках", есть готовый код:

Код:
function move-rec ($a,$b){
    begin{$splt = [io.path]::getfilename($a)}
    process{
        $fdst = $b+$(-join ($arr = $_.directoryname -split "($splt)")[2..$arr.length])
        if(!(test-path $fdst)){md "$fdst"|out-null}
        mi $_.fullname $fdst -force
    }
}
 
# Исходный и целевой каталоги
$src_m = ".\docs"
$dst_m = ".\docs1"
# Исключаемые файлы
$ex = '*.lnk'
 
# перемещаем файлы с сохранением структуры
dir $src_m -rec -exc $ex -file -force|move-rec $src_m $dst_m
 
# удаляем пустые каталоги
dir $src_m -rec -dir -force|sort{$_.fullname.length} -des|%{
    if((dir $_.fullname -rec -force) -eq $null){del $_.fullname -force}
}

- думаю, разберешься...
 
Добавлено:
farag  Цитата

Цитата:
не получается добавить аргумент у функции.

оператор вызова "&" не выполняет синтаксического разбора выполняемых строк, вместо него используй invoke-expression, должно заработать...

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 08:10 19-01-2021 | Исправлено: YuS 2, 09:17 19-01-2021
farag



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

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

Тоже подумал, но почему-то вместо выполнения выводит текст функции и ее аргумент.

Код:
 
Invoke-Expression -Command $Function
Invoke-Expression -Command "& $Function"
 

Как же ее правильно запустить?
 

Цитата:
У меня тут в "загашниках", есть готовый код:  

Тоже не работает. onliner какой-то.
 
Вот сами 2 папки, которые надо объединить (наложить): https://dropmefiles.com/MAdEc
"Metro\UPMetroSkin-master\Unofficial 4.x Patch\Main Files [Install First]" наложить на "Metro\metro-for-steam-4.4"

Всего записей: 2476 | Зарегистр. 27-07-2009 | Отправлено: 12:00 19-01-2021 | Исправлено: farag, 12:32 19-01-2021
YuS 2



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

Цитата:
Как же ее правильно запустить?


Код:
#Requires -RunAsAdministrator
#Requires -Version 5.1
 
[CmdletBinding()]
param (
    [Parameter(Mandatory = $false)]
    [string[]]
    $Functions
)
 
#Clear-Host
 
Set-StrictMode -Version Latest
 
Remove-Module -Name test -Force -ErrorAction Ignore
Import-Module -Name $PSScriptRoot\test.psd1 -PassThru -Force
 
Import-LocalizedData -BindingVariable Global:Localization -FileName test
 
if ($Functions) {
    foreach ($Function in $Functions) {
        iex $Function
    }
    exit
}
 
function1 -enabl
function2 -def
Hello

 

 
Добавлено:
farag

Цитата:
Тоже не работает. onliner какой-то.  

Ты Барабашку-то из компа выгони
Код проверенный, неоднократно...
 

Цитата:
https://dropmefiles.com/MAdEc

ну, где вы находите такие файлопомойки, скачать с них - необходимо шамана вызывать...
Написано:

 
- если нажать на скачать, меняется надпись на "ожидание" и всё...
Ну да не важно особо, какие там файлы. Проблема скорее всего с квадратными скобками (руки бы поотшибать этому микрософту с этими скобками... )
Потестирую - отпишусь.

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 12:33 19-01-2021
farag



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS 2
Я не выгружал модуль. Да, все работает, как и надо. Вечно я ))
 

Цитата:
файлопомойки

Хороший ФО. А то моя ошибка: не загрузив до конца архив, дал ссылку, прервав загрузку. Стресс один вокруг!
https://dropmefiles.com/XCTpx

Всего записей: 2476 | Зарегистр. 27-07-2009 | Отправлено: 12:54 19-01-2021
YuS 2



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

Цитата:
Стресс один вокруг!

Да было бы из-за чего переживать  
Подними руку, опусти резко с выдохом и скажи: да и х с ним!
Вот, пробуй:

Код:
удалено
 

 
- скрипт должен быть рядом с каталогом Metro, либо где угодно, но надо указать абсолютные пути в исходном и целевом каталогах.

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 13:23 19-01-2021 | Исправлено: YuS 2, 14:01 19-01-2021
farag



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

Цитата:
 
Да было бы из-за чего переживать  
Подними руку, опусти резко с выдохом и скажи: да и х с ним!
 

Я уже сегодня чуть не послал коллегу так. Как же все бесит. Хочется уйти, но везде то в бытовке сидят, то... 6 собеседований приходится проходить. Ладно, меня сейчас понесет, и никто все равно не поверит, что я видел)

Цитата:
скрипт должен быть рядом с каталогом Metro

С этого момента поподробнее. Гляну...

Всего записей: 2476 | Зарегистр. 27-07-2009 | Отправлено: 13:37 19-01-2021
YuS 2



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

Цитата:
С этого момента поподробнее.

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

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 13:45 19-01-2021 | Исправлено: YuS 2, 13:50 19-01-2021
farag



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

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

Я еще не настолько отупел, чтобы не понимать )
 
Добавлено:
YuS 2
Все файлы переместились в корень папки metro-for-steam-4.4 опять

Всего записей: 2476 | Зарегистр. 27-07-2009 | Отправлено: 13:47 19-01-2021
YuS 2



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

Цитата:
Все файлы переместились в корень папки metro-for-steam-4.4 опять

Да, это всё последствия квадратных скобок...
Вот, рабочий скрипт:

Код:
function move-rec ($a,$b){
    begin{$splt = [regex]::escape([io.path]::getfilename($a))}
    process{
        $fdst = $b+$(-join ($arr = $_.directoryname -split "($splt)")[2..$arr.length])
        if(!(test-path -lit $fdst)){md "$fdst"|out-null}
        mi -lit $_.fullname $fdst -force
    }
}
 
# Исходный и целевой каталоги
$src_m = ".\Metro\UPMetroSkin-master\Unofficial 4.x Patch\Main Files [Install First]"
$dst_m = ".\Metro\metro-for-steam-4.4"
# Исключаемые файлы
$ex = '*.lnk'
 
$src_m = gi -lit $src_m
$dst_m = gi -lit $dst_m
 
# перемещаем файлы с сохранением структуры
dir -lit $src_m.fullname -rec -exc $ex -file -force|move-rec $src_m.fullname $dst_m.fullname
 
# удаляем пустые каталоги
dir -lit $src_m.fullname -rec -dir -force|sort{$_.fullname.length} -des|%{
    if((dir -lit $_.fullname -rec -force) -eq $null){del -lit $_.fullname -force}
}

 
Добавлено:
А для общего случая, если целевого каталога не существует, то так:

Код:
param (
    # Исходный и целевой каталоги
    $source = "d:\FOLDER1",
    $destination = "d:\FOLDER2",
    # Маска(и) включаемых в выборку файлов
    [string[]]$include = ('*.pdf','*.txt'),
    # Маска(и) исключаемых файлов
    [string[]]$exclude = '*_abc.pdf'
)
 
function move-rec ($a,$b){
    begin{$splt = [regex]::escape([io.path]::getfilename($a))}
    process{
        $fdst = $b+$(-join ($arr = $_.directoryname -split "($splt)")[2..$arr.length])
        if(!(test-path -lit $fdst)){md "$fdst"|out-null}
        mi -lit $_.fullname $fdst -force
    }
}
 
$src_m = gi -lit $source
 
# перемещаем файлы с сохранением структуры
dir -lit $src_m.fullname -inc $include -exc $exclude -rec -file -force|
move-rec $src_m.fullname $destination
 
# удаляем пустые каталоги
dir -lit $src_m.fullname -rec -dir -force|sort{$_.fullname.length} -des|%{
    if((dir -lit $_.fullname -rec -force) -eq $null){del -lit $_.fullname -force}
}

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 14:00 19-01-2021 | Исправлено: YuS 2, 14:58 19-01-2021
farag



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS 2
Вроде, и правда работает.
Но я не могу разобраться, зачем

Код:
 
[regex]::Escape([System.IO.Path]::GetFileName($a))
 

Работает и с

Код:
 
(Get-Item -LiteralPath $a).Name
 

 

Код:
 
$b + $(-join ($arr = $_.directoryname -split "($splt)")[2..$arr.length])
 

А $_.directoryname от чего она? И что вообще происходит?

Всего записей: 2476 | Зарегистр. 27-07-2009 | Отправлено: 17:02 19-01-2021 | Исправлено: farag, 17:11 19-01-2021
YuS 2



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

Цитата:
Но я не могу разобраться, зачем

Скобки... квадратные скобки и прочая дребедень, которая может быть интерпретирована при Split, как спецсимвол регулярки, а не как часть имени, вот такие символы и необходимо экранировать...

Цитата:
System.IO.Path]::GetFileName($a)

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

Цитата:
А $_.directoryname от чего она? И что вообще происходит?

Эта строка формирует путь к новому местоположению каталога, то бишь целевой путь для каждого итема
А формируется она следующим образом: в $b указан корневой целевой каталог, а вот подкаталоги формируются из исходного местоположения, путем разрезания исходного пути на части, отбрасывания начальной части до корневого, исходного каталога, включая его самого и дальнейшего склеивания оставшихся частей... в общем, в итоге, получаем идентичную структуру от корневого исходного каталога, но уже в корне целевого, как-то так.

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 17:53 19-01-2021 | Исправлено: YuS 2, 17:59 19-01-2021
farag



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Можно эту строку передать как-то? Я же не пойму через месяц даже)

Всего записей: 2476 | Зарегистр. 27-07-2009 | Отправлено: 17:58 19-01-2021
YuS 2



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

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

хмм... что значит передать? и главное - куда/кому?

Цитата:
$_.directoryname

- это каталог с путем от каждого итема, которые последовательно передаются функции по конвейеру.

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 18:03 19-01-2021 | Исправлено: YuS 2, 18:04 19-01-2021
farag



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS 2
Переделать логикуя, чтобы было более понятнее.

Всего записей: 2476 | Зарегистр. 27-07-2009 | Отправлено: 18:11 19-01-2021
YuS 2



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

Цитата:
Переделать логику

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

Код:
$arr = $_.directoryname -split "($splt)"
$c = -join $arr[2..$arr.length]
$fdst = $b+$c

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 18:16 19-01-2021 | Исправлено: YuS 2, 18:31 19-01-2021
farag



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS 2
Ну, "компоненты" итак видно.

Всего записей: 2476 | Зарегистр. 27-07-2009 | Отправлено: 18:42 19-01-2021
YuS 2



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

Цитата:
"компоненты" итак видно.

это основная логика функции, ради которой она и создавалась, так что переделать её по-другому, не получится...
А что именно, собственно, вызывает затруднения в понимании?

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 19:50 19-01-2021
Открыть новую тему     Написать ответ в эту тему

Страницы: 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