我刚刚才发现everything可以通过命令行刷新数据库和创建文件列表……

我的目标:定期索引移动硬盘上的内容,不插硬盘时也能搜索文件

首先创建H.efu和I.efu,在everything选项里让它自动挂载这两个列表,
然后我只要写个批处理然后定期运行就行了(我用bblean的BroamTimer来运行重复任务)

<pre lang="html">@ECHO OFF

CD /D %~dp0
net start Everything
nircmd wait 1000
nircmd exec .\Everything.exe -startup
nircmd wait 5000
FOR %%u in (H,I) DO (
IF EXIST %%u:\Everything.%%u (
DEL /F /Q .\%%u.efu.bak
MOVE /Y .\%%u.efu .\%%u.efu.bak
.\Everything.exe -create-filelist %%u.efu %%u:
nircmd wait 5000
)
)
nircmd exec .\Everything.exe -reindex -startup



其中 %~dp0是批处理所在目录(我放在everything.exe同一目录下), %%u:\\Everything.%%u (比如H:\\Everything.H)是我在移动硬盘每个分区创建的隐藏文件,用作标记(别人的移动硬盘不会冲掉我的efu列表)
缺点:如何在插入硬盘的时候自动触发更新;插入硬盘的状态下实时的索引和我外挂的列表是重复的。

1024个赞 早知道能这样就不用定期手动更新efu了

”如何在插入硬盘的时候自动触发更新“ 可以另外开一个问题了,相当于找一个windows版的ifttt或者tasker

妈蛋,BroamTimer的interval是每个命令和下一个命令的间隔而不是循环的周期,被坑出翔了……
我只好把这个插件拷贝几个副本分别设定间隔

更正一下,everything.exe -reindex如果不加-startup参数隐藏运行的话,会把everything窗口呼叫出来。

这个问题简单嘛~用计划任务就可以了~添加计划任务,触发器是事件,然后在事件查看器里面看看你插入盘的时候出现的是什么事件,噢了~

艰苦奋斗_书剑_520c 说:

这个问题简单嘛~用计划任务就可以了~添加计划任务,触发器是事件,然后在事件查看器里面看看你插入盘的时候出现的是什么事件,噢了~

补充下:
事件的话可以参考Microsoft-Windows-Kernel-PnP/Device Configuration的事件,参考设备管理器中的硬件ID,然后根据xpath语法修改筛选器……
……似乎太麻烦了,估计会被打……

还有一种就是用safelyremove之类的软件,有插入后运行程序的功能……
真心求不打……

1.事件触发确实是一种思路,见 superuser.com/questions/219401/starting-scheduled-task-by-detecting-connection-of-usb-drive#659700 ,xp可能麻烦一点需要用eventtriggers命令行设置 https://microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/eventtriggers.mspx?mfr=true

2.话说插拔移动硬盘的时候本来就会触发everything重新扫描的啊,问题其实是外部的efu列表不会自动更新。而且仔细一想,插移动硬盘的时候马上更新efu列表意义不大(everything数据库本身更新了……所以这其实只是完qiang美po主zheng义的做法),我保持efu列表最新是为了拔掉移动硬盘之后的离线搜索,真正起作用的是拔掉移动硬盘之前的最后一次更新(不过拔盘之前触发更新也很麻烦,懒得弄了,还是定时更新就够用)。

3.看了一下 http://www.appinn.com/how-to-everything-filelists-offline-index/ ,发现我当时已经差不多有完整的思路了,就差命令行支持……

4.对于外挂efu列表导致搜索结果重复的问题,其实这是everything处理搜索结果的逻辑问题,只要everything能够识别盘符的一致性,那它一看自身数据库和外部efu文件的时间戳不就知道哪个新了?

mark

又修改了一下脚本,改用nircmd调用。随便加入了一点等待时间。这个原因比较私人,因为跟一系列的个人配置有关……

1.我开机用金山卫士设了很多延迟启动项(其中包括everything),不知道为啥我每次开机进到桌面如果不动一下鼠标键盘,就不会触发延迟启动项(大概计划任务在我的机器上没法判断“登陆时”这个触发条件?我桌面shell是bblean,而且设了自动登录)。
2.如果之前没有运行everything,那么我开机后第一次运行批处理的时候运行到.\everything -reindex -startup这里,运行完了之后就驻留内存了(本来驻留内存的应该是启动项里那个实例……),批处理认为这个程序没结束,就一直等在那里。
3.以后再定期运行批处理的时候,由于之前有个实例已经驻留内存了,再运行到这个命令的话,就正常结束了……也就是说后面每次运行批处理正常,只有第一次的那个cmd进程死活不肯走……

5.2 如何设置“Everything”而让它调用外部文件管理器?
需要“Everything”1.2.0 beta或更高版本。
退出“Everything”。
打开“Everything”安装文件夹中的Everything.ini文件。添加如下两行到文件末尾。
open_folder_command=$exec(“ExternalFileManager.exe” “%1”)
open_folder_path_command=$exec(“ExternalFileManager.exe” “$parent(%1)”)
请用完整的路径名和文件名替换上两行中的 ExternalFileManager.exe 。
阅读外部文件管理器的帮助,看是否需要其它的参数。
重启“Everything”。