Скопируйте и переименуйте файл каждую минуту - PullRequest
0 голосов
/ 18 февраля 2020

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

Folder 1 # gets overwritten every minute
a.txt
a_backup.txt

Folder 2
a1.txt
a1_backup.txt
a2.txt
a2_backup.txt
a3.txt
a3_backup.txt
a4.txt
a4_backup.txt

Было бы еще лучше, если бы файлы в папке 2 содержали дату и время их копирования в свои имена. Я придумал следующее:

$Source = 'C:\Users\Source'
$Destination = 'C:\Users\Target'
Do{
Copy-Item $Source\* -Destination $Destination
sleep -s 59
} while($true)

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

Любая помощь горячо приветствуется!

Ответы [ 2 ]

2 голосов
/ 18 февраля 2020

Новичок в предоставлении ответов, но вот мое предложение.

Получить контент, и, возможно, в другой файл с текущим временем на момент написания? Конечно, включите ваш l oop вокруг него

 Get-Content C:\log.txt | Out-File "Log.$([System.Math]::Round((date -UFormat %s),0)).txt""
1 голос
/ 18 февраля 2020
Get-ChildItem -Path $source | % { copy-item $_.FullName -Destination "$Destination\$((Get-Date).ToString("MMddyyyy-hhmmss"))$($_.Name)" }

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

$_.FullName включает полный путь .. может использоваться в качестве источника
$_.Name дает вам только имя файла (без пути)
(Get-Date).ToString("MMddyyyy-hhmmss") дает вам дату в формате, указанном в ToString(). Поскольку файл обновляется каждую минуту, вам нужно будет также указать минуты и секунды в вашем имени файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...