Войти

Показать полную графическую версию : Powershell. Множественное копирование или вызов скриптов.


epoddubniy
03-08-2021, 16:46
Здравствуйте.
Дано условие: если день запуска скрипта попадает в промежуток с 25 по 31, то из соответствующего каталога диска Е: в соответствующий каталог диска D: копируются файлы (созданные вчера) с добавлением даты в конец файла.
Каталогов из которых/в которые будут копироваться файлы - много, но для каждого из них написан код
Попытался объединить это в один сплошной но код выдает ошибку.


$Data=Get-Date -Format "dd.MM.yyyy"
$CurrentDay=get-date -format "dd"

#скрипт исполнялся 3 его числа. Грешу, что ошибка где-то в сравнении. Значении переменной $CurrentDay получается равным "03", а сравнивается с 2 и 4

if (($CurrentDay -ge 2) -and ($CurrentDay -lt 4) {
Get-ChildItem "E:\folder1" -Recurse | where-object {$_.creationtime -lt (get-date).date.adddays(1) -and $_.creationtime -ge (get-date).date.adddays(0)} | `ForEach-Object -Process {
Write-Host "$($_.FullName)`t→`D:\folder1\$($Data)_$($_.BaseName)"
Copy-Item -Path $_.FullName -Destination "D:\folder1\$($_.BaseName)_$Data.adi"
}, Get-ChildItem "E:\folder2\Резервная копия диска" -Recurse | where-object {$_.creationtime -lt (get-date).date.adddays(1) -and $_.creationtime -ge (get-
date).date.adddays(0)} | `ForEach-Object -Process {
Write-Host "$($_.FullName)`t→`D:\folder2\$($Data)_$($_.BaseName)"
Copy-Item[ -Path $_.FullName -Destination "D:\folder2\$($_.BaseName)_$Data.adi"
}
}

P.S. Была мысль для каждой пары каталогов копирования "из/в" сделать свой отдельный файл с расширением .ps1, но я так и не нашел информации, как запускать скрипты друг за дружкой в powershell из командного файла

Помогите пожалуйста реализовать идею, найти ошибки, исправить код
СПАСИБО!

Iska
03-08-2021, 16:51
копируются файлы »
Get-ChildItem "E:\folder1" -Recurse »
?

Каталогов из которых/в которые будут копироваться файлы - много, но для каждого из них написан код »
Создайте хэш-таблицу с парами Source-Destination, подавайте её на разбор по ForEach-Object, внутри которого будет процесс копирования файлов для каждой из пар.

DJ Mogarych
03-08-2021, 17:47
($CurrentDay -ge 2) -and ($CurrentDay -lt 4)
А зачем так витиевато? Не проще

(get-date).day -eq 3

?

epoddubniy
04-08-2021, 13:05
А зачем так витиевато? Не проще
Код:
(get-date).day -eq 3
? »
К сожалению, именно такой вариант был нужен. Нашел решение такое
$CurrentDay=get-date -format "dd" »
вместо этого: вот так $CurrentDay=get-date -format "%d" ноль будет отбрасываться, и вывод команды уже можно будет сравнить с диапазоном чисел по условию

Создайте хэш-таблицу с парами Source-Destination, подавайте её на разбор по ForEach-Object, внутри которого будет процесс копирования файлов для каждой из пар. »
Помогите пожалуйста реализовать. С этими таблицами никогда не имел дела. Из того, что получилось осмыслить (в результате прочтения статей в интернете), получился вот такой код (даже не знаю, правильно или нет. Поправьте пожалуйста!):


$Data=Get-Date -Format "dd.MM.yyyy"
$CurrentDay=get-date -format "%d"

$hash=@{
pair1='Get-ChildItem "E:\folder1" -Recurse | where-object {$_.creationtime -lt (get-date).date.adddays(0) -and $_.creationtime -ge (get-date).date.adddays(-1)} | ForEach-Object -Process {Copy-Item -Path $_.FullName -Destination "D:\folder1\$($_.BaseName)_$Data.adi"}';
pair2='Get-ChildItem "E:\folder2" -Recurse | where-object {$_.creationtime -lt (get-date).date.adddays(0) -and $_.creationtime -ge (get-date).date.adddays(-1)} | ForEach-Object -Process {Copy-Item -Path $_.FullName -Destination "D:\folder2\$($_.BaseName)_$Data.adi"}'}

if (($CurrentDay -ge 2) -and ($CurrentDay -lt 5)) {$hash[@('pair1', 'pair2')]}




В POWERSHELL ISE все выполнилось без "красноты" по отдельности pair1 и pair2 тоже отрабатывают (необходимые файлы копируются). Теряюсь в догадках...

alpap
04-08-2021, 22:35
Помогите пожалуйста реализовать. С этими таблицами никогда не имел дела. »
к примеру так:

if ((Get-Date).day -NotIn 25..31) {Exit} # Запуск будет только если текущий день в диапазоне 25 - 31

$sPath = [Ordered]@{
'C:\1a' = 'C:\2a'
'C:\1b' = 'C:\2b'
}

$sPath.GetEnumerator()|% {
$source = $_.Key
$destination = $_.Value

gci $source
write "$source - $destination"
}




© OSzone.net 2001-2012