使用PowerShell在文件更改时复制文件

4
我正在使用 FileSystemWatcher 监视文件变化,并在文件发生更改后创建该文件的副本:
$watcher = New-Object System.IO.FileSystemWatcher
$watcher.Path = "C:\Orders\"
$watcher.IncludeSubdirectories = $false
$watcher.EnableRaisingEvents = $true

$changed = Register-ObjectEvent $watcher "Changed" -Action {
   write-host "Changed: $($eventArgs.FullPath)"
   $datestamp = get-date -uformat "%Y%m%d%H%M%S" 
   write-host $datestamp
   copy-item $eventArgs.FullPath "$(watcher.Path)backup-$datestamp"
}

因此,如果更改了 C:\Orders\orders.xml ,则应创建 C:\Orders\backup-20131125121004。 但是,它目前无法正常工作,也没有产生错误。通知可以正常工作,但复制功能无法实现:
Windows PowerShell
Copyright (C) 2009 Microsoft Corporation. All rights reserved.

PS C:\Documents and Settings\sladministrator\Desktop> .\WatchBizSyncOrders.ps1
PS C:\Documents and Settings\sladministrator\Desktop> Changed: C:\Orders\New Text Document.txt
20131125100821
1个回答

5

将其更改为:

$(watcher.Path)backup-$datestamp"

to

$($sender.Path)backup-$datestamp"

请注意,$() 中的变量仍需要一个 $。而 $sender 自动变量始终包含生成事件的对象。

这个很棒!谢谢,我不知道 $sender。我的完成脚本在这里供参考:https://github.com/mrichman/bizsync/blob/master/WatchBizSyncOrders.ps1 - Mark Richman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接