我有一个包含大量批处理文件的文件夹 - 可以在Windows资源管理器中一次显示在屏幕上。其中一些是聚集在一起的,需要按顺序执行(但不能在相同的批处理中执行,因为在批处理文件可以处理之外的中间步骤是必要的。)
我的一个文件按预期工作,但是当我运行该文件时,它会导致资源管理器窗口滚动到列表顶部。这不是一种瘫痪 - 但它会引起轻微的刺激,因为它分散了我上次运行的文件的注意力。 (另外,它只是很奇怪,我想了解发生了什么。)
我已将问题隔离到setx
调用:如果我注释掉这一行,批处理文件将在Explorer窗口中执行,该窗口显示它所在的目录。如果我取消注释该行并双击该文件,批处理文件将执行和,其资源管理器窗口将滚动到顶部。
对于诊断,我将其缩减为一行:我创建了一个名为 Test.bat 的文件,只有以下内容:
setx TestValue abc
我在其中放入了一个文件夹,其中包含足够的文件,但它们并非一次全部可见 - 而且,因为它以 T 开头, Test.bat 显示在底部附近。当我双击它时,窗口滚动到顶部。
我正在使用Windows 10.并在另一台计算机上尝试过这个(结果相同)只是为了确定它不是我原来机器的怪癖。
这种行为是否可以通过命令切换或更改Windows配置来否定?
答案 0 :(得分:3)
为什么?
setx
命令向所有顶级窗口发送WM_SETTINGCHANGE
消息,以通知对环境的更改(lParam
为Environment
)。
这会导致资源管理器窗口重新处理其环境,并在此过程中重新定位文件列表。
如何解决?
setx
中没有任何方法可以禁用发送消息,我也不知道(仅使用操作系统)向explorer
窗口指示不处理收到消息(需要处理,以便新启动的进程可以看到新变量)。
我看到处理这个"问题的唯一方法"是直接将变量写入注册表,只在需要通知其余窗口环境变化时才调用setx
。