2013-11-25 62 views
4

变化的文件,我使用的是FileSystemWatcher通知文件上的变化,然后创建该文件的一个副本:复制使用PowerShell的

$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 

回答

4

更改此:

$(watcher.Path)backup-$datestamp" 

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

注意,$()里面的变量仍然需要$。自动变量将始终包含生成事件的对象。

+0

这工作得很好!谢谢,我不知道'$ sender'。我已完成的脚本供参考:https://github.com/mrichman/bizsync/blob/master/WatchBizSyncOrders.ps1 –