powershell 监控Windows资源管理器选中的文件夹及文件

powershell 监控Windows资源管理器选中的文件夹及文件

01 前言

在整理大量文件的时候,有些文件可能需要根据内容做不同的处理,比如,移动到另外一个目录中。那么如何判断当前在文件资源管理器中选择了哪些文件呢?决定用powershell试试,找了一些资料之后,发现使用系统自带的shdocvw.dll可以做到,记录一下。

02 正文

shdocvw.dll一般位于C:\Windows\System32下,但是不能直接使用,需要转换一下。
转换过程略,下载链接在文章顶部。

代码如下:

<#

监控Windows资源管理器选择的文件

by hokis
20240506_164639

#>

[void][System.Reflection.Assembly]::LoadFile($PSScriptRoot+"\shdocvw.NET.dll")

$wins = New-Object shdocvw.NET.ShellWindowsClass
$cnt = 1
do
{
    Write-Host ('====== times:' + $cnt+' ======')
    foreach($w in $wins){
        $fn = [System.IO.Path]::GetFileNameWithoutExtension($w.FullName).ToLower()
        if($fn -in @('explorer','资源管理器')){
            foreach($item in $w.Document.SelectedItems()){
                #名称,全路径
                Write-Host ('file name:{0},full name:{1}' -f $item.Name,$item.Path)
            }
        }
    }
    $cnt++
    if($cnt -gt 10) {
        break
    }
    sleep -Seconds 3
}
while ($true)

Write-Host 'Done...'

脚本使用注意:

  • powershell 5.1下测试通过
  • 下载对应的dll(在文章顶部),放在跟脚本同一路径下。
  • 代码另存为 run.ps1,右键,“使用 PowerShell 运行”。弹出界面后,点“确定”按钮注册全局热键,点“取消”可以取消热键。
  • 如果不能执行脚本,提示“无法加载文件 C:\XXX\run.ps1,因为在此系统上禁止运行脚本……”。请先修改powershell执行策略(参考此处

03 后记

配合【全局热键】使用,效率一下就提高了。

欢迎留言交流~
------END------

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 我可以使用PowerShell监控文件夹,但要先确定你想要监控文件夹路径,然后运行以下命令:Get-ChildItem -Path <文件夹路径> -Recurse -Force | Where-Object { $_.LastWriteTime -ge (Get-Date).AddMinutes(-5) } | Select-Object FullName, LastWriteTime。 ### 回答2: 在PowerShell中,可以使用`FileSystemWatcher`类来监控文件夹。以下是一个用于监控文件夹的基本示例: ```powershell $folderPath = "C:\Path\To\Folder" $watcher = New-Object System.IO.FileSystemWatcher $watcher.Path = $folderPath $watcher.IncludeSubdirectories = $true $watcher.EnableRaisingEvents = $true $onCreated = Register-ObjectEvent $watcher "Created" -Action { $eventArgs = $Args[1] $name = $eventArgs.Name $changeType = $eventArgs.ChangeType $timeStamp = $eventArgs.TimeGenerated Write-Host "文件文件夹已创建:$name ($changeType) - $timeStamp" } $onChanged = Register-ObjectEvent $watcher "Changed" -Action { $eventArgs = $Args[1] $name = $eventArgs.Name $changeType = $eventArgs.ChangeType $timeStamp = $eventArgs.TimeGenerated Write-Host "文件文件夹已更改:$name ($changeType) - $timeStamp" } $onDeleted = Register-ObjectEvent $watcher "Deleted" -Action { $eventArgs = $Args[1] $name = $eventArgs.Name $changeType = $eventArgs.ChangeType $timeStamp = $eventArgs.TimeGenerated Write-Host "文件文件夹已删除:$name ($changeType) - $timeStamp" } $onRenamed = Register-ObjectEvent $watcher "Renamed" -Action { $eventArgs = $Args[1] $name = $eventArgs.Name $changeType = $eventArgs.ChangeType $timeStamp = $eventArgs.TimeGenerated Write-Host "文件文件夹已重命名:$name ($changeType) - $timeStamp" } # 保持脚本运行 while ($true) { Start-Sleep -Seconds 1 } ``` 上述示例使用`FileSystemWatcher`类创建了一个文件系统监视对象,然后设置了要监视的文件夹路径。可以使用`IncludeSubdirectories`属性来监视文件夹及其子文件夹中的更改。之后,为库中的不同事件(如创建、更改、删除和重命名)注册了事件处理程序,并在其内部写入相应的消息。最后,通过`Start-Sleep`命令使脚本一直运行,以便持续监测文件夹中的变化。 请注意,在实际使用中,您可能需要根据实际需求进行自定义操作,例如将文件夹更改通知写入日志文件或触发其他操作等。 ### 回答3: Powershell是一种强大的脚本语言和命令行工具,可用于监控文件夹的活动。下面是一个使用Powershell监控文件夹的基本步骤: 首先,需要定义要监控文件夹路径。可以使用“$folderPath”变量来存储文件夹路径。 接下来,使用`Get-ChildItem`命令获取文件夹中的文件和子文件夹列表。使用`-Recurse`参数可以递归检查所有子文件夹。 然后,使用`Register-ObjectEvent`命令注册一个事件,以便在文件夹中的内容发生更改时发出信号。可以使用`-Action`参数指定处理更改事件的脚本块。 如需监控文件夹中的文件创建、修改和删除事件,可以使用以下示例脚本: ```powershell $folderPath = "C:\Path\To\Folder" $folderWatcher = New-Object System.IO.FileSystemWatcher $folderWatcher.Path = $folderPath $folderWatcher.IncludeSubdirectories = $true $folderWatcher.EnableRaisingEvents = $true $onChanged = Register-ObjectEvent $folderWatcher "Changed" -Action { $eventArgs = $EventArgs[1] $path = $eventArgs.FullPath $changeType = $eventArgs.ChangeType Write-Host "File $path was $changeType" } $onCreated = Register-ObjectEvent $folderWatcher "Created" -Action { $eventArgs = $EventArgs[1] $path = $eventArgs.FullPath Write-Host "File $path was created" } $onDeleted = Register-ObjectEvent $folderWatcher "Deleted" -Action { $eventArgs = $EventArgs[1] $path = $eventArgs.FullPath Write-Host "File $path was deleted" } # 等待监控事件发生,执行其他任务或休眠 ``` 通过运行这个脚本,Powershell监控指定文件夹中的文件更改、创建和删除事件,并在控制台上显示相应的消息。 上面的示例只是一种基本用法,你可以根据自己的需求进一步扩展和自定义监控功能。例子中采用的`Write-Host`命令只是将消息输出到控制台上。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值