如何检测修改的文件并将它们移动到名为贮存在我的桌面有什么方法可以用 powershell/bat/vbscript 来做到这一点吗?没有有第三方工具吗?
答案1
.NET 框架具有系统.IO.FileSystemWatcher,可以通过 PowerShell 访问(例子)。
答案2
这将打印出新创建的文件c:\win16
。请注意文件夹路径中的双反斜杠。Within 10
表示每 10 秒检查一次。
这会将新文件复制到C:\Win16
。C:\Users\User\Desktop\Backup\
请注意结尾的反斜杠。您需要编辑路径。
所有的Replace
s 和Split
s 都将其作为纯文件路径,将两个反斜杠变成一个,删除引号,并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) }