通过改变 ID 或文件名关闭资源管理器窗口

2023-12-12

我已经在这些论坛上搜索了几个小时,试图找到一种方法来编写我认为比这简单得多的代码。

所以这就是我想做的: 我的任务计划程序每两天运行一个脚本。该脚本打开一个explorer.exe文件夹的路径,然后删除该文件夹中的所有文件。调度程序在我不在办公室的晚上运行脚本。但是,当我进入办公室时,资源管理器窗口会打开该页面。我知道这很简单 - 但我不想看到该窗口打开,所以我希望运行脚本,然后关闭窗口,这样我就看不到任何东西。

我已经尝试过各种方法。当我尝试做一些简单的事情时

$var1 = invoke-item C:\path\file
$var1.quit()

or

$var1.close()

但是当我这样做时,我收到一条错误消息,指出该变量为空。

然后我尝试停止该过程。但我不希望关闭所有资源管理器文件,只是关闭特定的资源管理器窗口。因此,为了做到这一点,我必须知道窗口的 ID。但由于该特定窗口的 ID 不是静态的,我需要获取进程 ID - 将其分配给一个变量 - 然后使用stop-process使用该变量的 cmdlet。

这就是我现在正在尝试的:

get-process | where-object {$_.MainWindowTitle -eq "filename"} | select -property id | $var2

然而,当我运行这个脚本时,它仍然说该变量为空。

那么如何给变量赋值呢?或者如果有人有更好的方法来关闭特定窗口。

(我尝试过使用stop-process仅使用mainwindowtitle- 但它仍然需要一个 id)


如果您确实想关闭特定的文件资源管理器窗口,那么您需要使用Shell.Application。列表打开文件资源管理器窗口:

$shell = New-Object -ComObject Shell.Application
$shell.Windows() | Format-Table Name, LocationName, LocationURL

Name          LocationName LocationURL           
----          ------------ -----------           
File Explorer Windows      file:///C:/Windows    
File Explorer folder       file:///C:/path/folder

我想关闭其中一个c:\path\folde,所以让我们找到它并关闭它:

$shell = New-Object -ComObject Shell.Application
$window = $shell.Windows() | Where-Object { $_.LocationURL -like "$(([uri]"c:\path\folder").AbsoluteUri)*" }
$window | ForEach-Object { $_.Quit() }

然而,正如评论中提到的,你把这个问题过于复杂化了。 PowerShell 的目的是使其自动化,这通常意味着您根本不想使用 GUI。我不确定您想要删除或保留什么等,但这里有一个您可以使用的示例:

#Get contents of folder (not recursive)
Get-ChildItem -Path 'c:\path\folder' |
#Only files
Where-Object { !$_.PSIsContainer } |
#Remove...
Remove-Item
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过改变 ID 或文件名关闭资源管理器窗口 的相关文章

随机推荐