如果我在 Windows 资源管理器文件夹中有 5 个或更多文件,并且我使用仅更改大写的脚本重命名它们,则资源管理器不会自动“刷新”并在打开的资源管理器窗口中显示新名称。如果我仅重命名 1 到 4 个文件或将名称中的字母更改为其他内容,它会自动刷新。
我必须在打开 Explorer 窗口的情况下手动按“F5”才能看到新名称。有没有办法让 Explorer 或 Windows 10 在脚本中自动刷新目录,这样我就不必按 F5 了?
这是一个示例批处理文件(rename.bat)
ren file_important_stuff_1.txt File_Important_Stuff_1.txt
ren file_important_stuff_2.txt File_Important_Stuff_2.txt
ren file_important_stuff_3.txt File_Important_Stuff_3.txt
ren file_important_stuff_4.txt File_Important_Stuff_4.txt
ren file_important_stuff_5.txt File_Important_Stuff_5.txt
它也无法与简单的 Python 脚本一起工作:
import os
for x in range(1,6):
fileNameOld = "file_important_stuff_" + str(x) + ".txt"
fileNameNew = "File_Important_Stuff_" + str(x) + ".txt"
os.rename(fileNameOld,fileNameNew)
这是包含文件的目录的图片:
答案1
这样的脚本可以帮助您:
$windows = $(New-Object -ComObject Shell.Application).Windows()
$windows | ? { $_.FullName -eq "C:\Windows\explorer.exe" -and $_.LocationURL -match "$path$" } | % { $_.Refresh() }
分解:
$(New-Object -ComObject Shell.Application).Windows()
- 为 Explorer/IE 创建 COM 对象并获取其活动窗口$_.FullName -eq "C:\Windows\explorer.exe"
- 仅过滤( )explorer.exe
中的窗口的条件- 几乎所有 Windows 10+ 用户很可能都会跳过这一步Where-Object
?
$_.LocationURL -match "$path$"
- 将您的路径(例如,您可以将其作为脚本参数传递)与位置 URL 匹配。某些路径可能需要在匹配之前进行处理,例如,我注意到%20
该字段中的空格被转换为,但我无法快速找到完整的编码方法。$
最后确保 URL 以您的路径结尾。您可以跳过此步骤,只需刷新所有资源管理器窗口即可。$_.Refresh()
Foreach-Object
- 在(%
)中刷新过滤窗口
这只适用于 Explorer 的默认行为(例如,它看不到其他选项卡栏标签)。