我希望每次运行时都启动 explorer.exe 的新实例,start \\path
即使同一路径已经在窗口中启动。目前它的工作方式如下:
start C:\Users
它会启动一个带有该路径的窗口
start C:\Users
它聚焦于之前打开的窗口
编辑
我想“实例”这个词不太恰当。我的意思是我想打开文件资源管理器的另一个窗口,而不是它的另一个实例。
答案1
笔记:这是一个解决方案Windows 11并已确认可以正常工作。对于 Windows 10,您需要在本答案的末尾使用不同的解决方案
您可以获得Shell.Application
可编写脚本的 Shell 对象轻松操作 Windows shell。在 PowerShell 中,每次运行以下命令时都会打开一个新的 Explorer
(New-Object -ComObject Shell.Application).Explore("C:\Users")
在 cmd 中你需要 PowerShell 的帮助,或者韦斯霍尔和虚拟专用网络或者脚本。例如,您可以将以下代码保存为openFolder.vbs
CreateObject("Shell.Application").Explore(WScript.Arguments.Item(0))
然后在 cmd 中运行openFolder.vbs C:\Users
。您还可以使用混合批处理/VBS 或批处理/Jscript,您可以将其另存为openFolder.bat
并调用它,例如openFolder C:\Users
@if (@CodeSection == @Batch) @then
@echo off
cscript //e:jscript //nologo "%~f0" %*
exit /b
@end
// JScript Section
(new ActiveXObject("shell.application")).Explore(WScript.Arguments.Item(0));
当然你也可以将上面最后一行保存为openFolder.js
并以同样的方式调用
对于 Windows 10,出于某种原因Open()
或者Explore()
不起作用,仍然关注当前打开的窗口,所以你必须打开一些目前未打开的文件夹,然后Navigate()
窗口到所需的文件夹
# Create the shell object
$s = New-Object -ComObject Shell.Application
# Open a random folder that's not opened in Explorer
# I choose Control Panel (0x03/::{26EE0668-A00A-44D7-9371-BEB064C98683}\0)
# for simplicity
$s.Open(0x03)
# Wait for the folder to open. You may need to increase the delay
# if your CPU is slow or under high load
sleep 1
$openedPath = "::{26EE0668-A00A-44D7-9371-BEB064C98683}\0"
# Find the folder we've just previously opened
foreach ($win in $s.Windows()) {
if ($win.Document.Folder.Self.Path -ieq $openedPath) {
# Got the newly opened window, now we navigate it away
$win.Navigate("C:\Users"); break
}
}
对于 VBS 或 Jscript 执行相同操作