Как реализовать скрипт\программу для автоматизации переноса файлов? Доброго времени суток господа.
Дано: папка DANO- внутри нее субпапки, которые являются папками проекта, с файлами внутри.
Требуется: .exe файл, который будет после выполнения забирать вновь созданные файлы 2-х разрешений, например .file и .porject и копировать их в папку C->FOLDER.
При запуске на след день, из папки C->FOLDER будут удаляться старые файлы .file и .project и перемещаться в C->FOLDER->ARCHIVE, а внутри папки ARCHIVE файлы должны сортироваться по ARCHIVE->ГОД->МЕСЯЦ->ДЕНЬ
Я далек от программирования, но изучая вопрос не нашел софта, на котором можно реализовать такую утилитку.
Думал в сторону скрипта powerrshell:#By BigTeddy 05 September 2011
#This script uses the .NET FileSystemWatcher class to monitor file events in folder(s).
#The advantage of this method over using WMI eventing is that this can monitor sub-folders.
#The -Action parameter can contain any valid Powershell commands. I have just included two for example.
#The script can be set to a wildcard filter, and IncludeSubdirectories can be changed to $true.
#You need not subscribe to all three types of event. All three are shown for example.
# Version 1.1
$folder = 'C:\PRIMER' # Enter the root path you want to monitor.
$filter = '*.*' # You can enter a wildcard filter here.
# In the following line, you can change 'IncludeSubdirectories to $true if required.
$fsw = New-Object IO.FileSystemWatcher $folder, $filter -Property @{IncludeSubdirectories = $true;NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'}
# Here, all three events are registerd. You need only subscribe to events that you need:
Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action {
$name = $Event.SourceEventArgs.Name
$changeType = $Event.SourceEventArgs.ChangeType
$timeStamp = $Event.TimeGenerated
Write-Host "The file '$name' was $changeType at $timeStamp" -fore green
Out-File -FilePath c:\scripts\filechange\outlog.txt -Append -InputObject "The file '$name' was $changeType at $timeStamp"}
Register-ObjectEvent $fsw Deleted -SourceIdentifier FileDeleted -Action {
$name = $Event.SourceEventArgs.Name
$changeType = $Event.SourceEventArgs.ChangeType
$timeStamp = $Event.TimeGenerated
Write-Host "The file '$name' was $changeType at $timeStamp" -fore red
Out-File -FilePath c:\scripts\filechange\outlog.txt -Append -InputObject "The file '$name' was $changeType at $timeStamp"}
Register-ObjectEvent $fsw Changed -SourceIdentifier FileChanged -Action {
$name = $Event.SourceEventArgs.Name
$changeType = $Event.SourceEventArgs.ChangeType
$timeStamp = $Event.TimeGenerated
Write-Host "The file '$name' was $changeType at $timeStamp" -fore white
Out-File -FilePath c:\scripts\filechange\outlog.txt -Append -InputObject "The file '$name' was $changeType at $timeStamp"}
# To stop the monitoring, run the following commands:
# Unregister-Event FileDeleted
# Unregister-Event FileCreated
# Unregister-Event FileChanged
$a=Get-Item ($folder+"\/"+$name)
switch ($a.Extension)
{
'.mp3' {Write-Host "AudioFile"; Copy-Item $a.FullName -Destination d:\test\Audio}
'.txt' {Write-Host "TextFile"; Copy-Item $a.FullName -Destination d:\test\Text}
'.bat' {Write-Host "batchfile"}
}
Но ничего не понимая в программировании трудно что то разобрать.

21 Авг 2019 в 06:22
288 +1
0
Ответы
1

Для реализации автоматизации переноса файлов в вашем случае, вы можете использовать PowerShell скрипт примерно следующего вида:

$sourceFolder = "DANO"
$destinationFolder = "C:\FOLDER"
$archiveFolder = "C:\FOLDER\ARCHIVE"
# Проверяем, что папки назначения существуют, если нет - создаем их
if (-not (Test-Path $destinationFolder)) {
New-Item -ItemType Directory -Force -Path $destinationFolder
}
if (-not (Test-Path $archiveFolder)) {
New-Item -ItemType Directory -Force -Path $archiveFolder
}
# Переносим новые файлы с расширениями .file и .project из папки DANO в папку назначения
Get-ChildItem $sourceFolder -Recurse | Where-Object { $_.Extension -eq ".file" -or $_.Extension -eq ".project" } | ForEach-Object {
Copy-Item $_.FullName -Destination $destinationFolder
}
# Переносим старые файлы из папки назначения в папку архива
Get-ChildItem $destinationFolder | Where-Object { $_.Extension -eq ".file" -or $_.Extension -eq ".project" } | ForEach-Object {
Move-Item $_.FullName -Destination $archiveFolder
# Создаем папки для сортировки по дате
$yearFolder = Join-Path -Path $archiveFolder -ChildPath $_.LastWriteTime.Year
$monthFolder = Join-Path -Path $yearFolder -ChildPath $_.LastWriteTime.ToString("MM")
$dayFolder = Join-Path -Path $monthFolder -ChildPath $_.LastWriteTime.ToString("dd")
if (-not (Test-Path $yearFolder)) {
New-Item -ItemType Directory -Force -Path $yearFolder
}
if (-not (Test-Path $monthFolder)) {
New-Item -ItemType Directory -Force -Path $monthFolder
}
if (-not (Test-Path $dayFolder)) {
New-Item -ItemType Directory -Force -Path $dayFolder
}
Move-Item $_.FullName -Destination $dayFolder
}

Вы можете сохранить этот скрипт в файл с расширением .ps1 и запускать его по расписанию с помощью планировщика задач Windows.

Этот скрипт сначала переносит новые файлы с расширениями .file и .project из папки DANO в папку C:\FOLDER, а затем перемещает старые файлы из папки C:\FOLDER в папку C:\FOLDER\ARCHIVE, сортируя их по дате создания в папках с именами года, месяца и дня.

20 Апр 2024 в 13:19
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир