检测已更改的文件

检测已更改的文件

如何检测修改的文件并将它们移动到名为贮存在我的桌面有什么方法可以用 powershell/bat/vbscript 来做到这一点吗?没有有第三方工具吗?

答案1

.NET 框架具有系统.IO.FileSystemWatcher,可以通过 PowerShell 访问(例子)。

答案2

这将打印出新创建的文件c:\win16。请注意文件夹路径中的双反斜杠。Within 10表示每 10 秒检查一次。

这会将新文件复制到C:\Win16C:\Users\User\Desktop\Backup\请注意结尾的反斜杠。您需要编辑路径。

所有的Replaces 和Splits 都将其作为纯文件路径,将两个反斜杠变成一个,删除引号,并split丢弃返回字符串的第一部分。

叫它monitorfolder.vbs

Set FSO = CreateObject("Scripting.FileSystemObject")
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colMonitoredEvents = objWMIService.ExecNotificationQuery _
("SELECT * FROM __InstanceCreationEvent WITHIN 10 WHERE Targetinstance ISA 'CIM_DirectoryContainsFile' and TargetInstance.GroupComponent= 'Win32_Directory.Name=""c:\\\\Win16""'")
Do
    Set objLatestEvent = colMonitoredEvents.NextEvent
    FSO.MoveFile Replace(Replace(Split(objLatestEvent.TargetInstance.PartComponent, "=")(1), "\\", "\"), """", ""), "C:\Users\User\Desktop\Backup\"
Loop

将其打印到控制台窗口

Shift+右键单击在文件上 -复制为路径. 以管理员身份打开命令提示符并 右击-粘贴,然后按键并将其添加cscript //nologo到 vbs 的路径中。然后按Ctrl+C停止监控。

输出将如下所示

C:\Windows\system32>cscript //nologo "C:\Users\User\Desktop\Bat+Vbs\monitorfolder.vbs"
"c:\Win16\file.txt"
"c:\Win16\Folder Property List.txt"
"c:\Win16\IHS.pdf"
"c:\Win16\nfs3.exe - Shortcut.lnk"

笔记

当文件被修改或创建时,Windows 会设置其存档位。XCopy只能复制设置了存档位的文件,然后清除该位。这就是早期 MS-Dos 备份程序的工作方式。它只复制自上次备份以来修改过的新文件。请参阅attrib /?xcopy /?

答案3

可能的解决方案是,每 10 分钟运行一次 powershell 脚本,查找创建/修改的文件并移动

Get-ChildItem -Recurse | ? { $_.CreationTime -gt $(get-date).AddMinutes(-10)} | % { Move-Item -Path $_.FullName -Destination $(Join-Path  -Path $([Environment]::GetFolderPath("Desktop")) -ChildPath source) }

相关内容