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------