XY出现崩溃的原因和解决方法

出现崩溃现象效果如下图

会出现一个Coffee的俯视图。

原因就两种,具体看图片红字描述。

减少或避免出现崩溃的方法

  • 选中非最后一个标签页,然后新建标签页
  • 尽量少用设置(Configuration(F9))按钮,如果要用,记得在File -> Save Setting,否则会丢失本次打开的使用记录。

重要提示:上述图中两个原因所述的危险操作执行前,请确保XY的数据已经备份。因为崩溃后,本次会话的XY数据会全丢失。

终极解决方法:购买XY正版。

Win+E快捷键链接到XYplorer

Autohotkey修改Win+E,使热键重新链接到XYplorer

  1. 下载AutoHotkey

  2. 在磁盘任意处创建XYplorer.ahk

  3. 用记事本等编辑文本的程序打开

  4. 复制以下代码,根据自身情况替换路径:

    1
    2
    3
    4
    5
    #e:: ;win+e 打开XYplorer

    Run C:\Program Files\XYplorer\XYplorer.exe

    Return

    ;win+e 打开XYplorer是注释

    C:\Program Files\XYplorer\XYplorer.exe 换成XYplorer.exe的路径

优缺点:

需要Autohotkey常驻并且载入了XYplorer.ahk脚本,因此需要将脚本添加到开机自启动。

使用AutoHotkey不会破坏Win+E原有的功能,只需关闭AutoHotkey脚本即可恢复原有功能,在重装系统之前,只需备份脚本文件,新装系统安装AutoHotkey就可使用。

添加.ahk文件到开机启动项

有三种方法可以实现脚本文件开机自启:

将AutoHotkey脚本文件添加到开机启动项,开机后就可以使用Win+E打开XY了。

将编写的XYplorer.ahk或者XYplorer.ahk的快捷方式复制到C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp(系统目录)或者C:\Users\<Your User Name>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup(个人目录)中。

其中个人目录可以通过Win+R -> shell:startup打开

如果都启动不起来,可以使用计划任务。

具体步骤如下:

  1. 通过Win+R -> taskschd.msc打开计划任务。
  2. 右键点击任务计划程序(本地) > 任务计划程序库
  3. 右侧面板中点击创建基本任务
  4. 剩下的设置自行百度吧。GUI画面的tasksch.msc操作很简单了。如果还是无法自启动.ahk,把它放到桌面手动启动吧。

使用Startup Delayer
下载地址
https://www.r2.com.au/page/products/download/startup-delayer/
下载后自行添加启动项

更多参考

Google找到关于AHK的将Windows Exploer重定义到XY的方法:

[AHK] redirecting Windows Explorer to XY - XYplorer Beta Club https://www.xyplorer.com/xyfc/viewtopic.php?f=7&t=10671

目前没时间看,有兴趣的各位可以研究。

Win+E替换成XY也可以参考xyplorer的‘完美’设置 - 简书

这种方式是通过注册表修改,很方便,但是请修改前备份此部分的注册表,还有一点,我没测试过。

如果你不喜欢注册表被修改,可以使用AutoHotkey。

批量命名(Rename Special)

[案例1] 寻找指定字符串进行替换

需求背景:保证视频文件名(不含后缀)与外挂字幕文件名(不含后缀)一致,Potplayer播放时就会自动载入字幕,为了完成这样的需求,需要改动网上下载到的字幕文件名。

我现有如下文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
F:\Downloads\[VCB-Studio] Shokugeki no Souma][Ma10p_1080p][x265_flac]Subtitles繁体>dir ./b
[VCB-Studio] Shokugeki no Souma [01][Ma10p_1080p][x265_flac].TC-CASO&SumiSora.ass
[VCB-Studio] Shokugeki no Souma [02][Ma10p_1080p][x265_flac].TC-CASO&SumiSora.ass
[VCB-Studio] Shokugeki no Souma [03][Ma10p_1080p][x265_flac].TC-CASO&SumiSora.ass
[VCB-Studio] Shokugeki no Souma [04][Ma10p_1080p][x265_flac].TC-CASO&SumiSora.ass
[VCB-Studio] Shokugeki no Souma [05][Ma10p_1080p][x265_flac].TC-CASO&SumiSora.ass
[VCB-Studio] Shokugeki no Souma [06][Ma10p_1080p][x265_flac].TC-CASO&SumiSora.ass
[VCB-Studio] Shokugeki no Souma [07][Ma10p_1080p][x265_flac].TC-CASO&SumiSora.ass
[VCB-Studio] Shokugeki no Souma [08][Ma10p_1080p][x265_flac].TC-CASO&SumiSora.ass
[VCB-Studio] Shokugeki no Souma [09][Ma10p_1080p][x265_flac].TC-CASO&SumiSora.ass
[VCB-Studio] Shokugeki no Souma [10][Ma10p_1080p][x265_flac].TC-CASO&SumiSora.ass
[VCB-Studio] Shokugeki no Souma [11][Ma10p_1080p][x265_flac].TC-CASO&SumiSora.ass
[VCB-Studio] Shokugeki no Souma [12][Ma10p_1080p][x265_flac].TC-CASO&SumiSora.ass
[VCB-Studio] Shokugeki no Souma [13][Ma10p_1080p][x265_flac].TC-CASO&SumiSora.ass
[VCB-Studio] Shokugeki no Souma [14][Ma10p_1080p][x265_flac].TC-CASO&SumiSora.ass
[VCB-Studio] Shokugeki no Souma [15][Ma10p_1080p][x265_flac].TC-CASO&SumiSora.ass
[VCB-Studio] Shokugeki no Souma [16][Ma10p_1080p][x265_flac].TC-CASO&SumiSora.ass
[VCB-Studio] Shokugeki no Souma [17][Ma10p_1080p][x265_flac].TC-CASO&SumiSora.ass
[VCB-Studio] Shokugeki no Souma [18][Ma10p_1080p][x265_flac].TC-CASO&SumiSora.ass
[VCB-Studio] Shokugeki no Souma [19][Ma10p_1080p][x265_flac].TC-CASO&SumiSora.ass
[VCB-Studio] Shokugeki no Souma [20][Ma10p_1080p][x265_flac].TC-CASO&SumiSora.ass
[VCB-Studio] Shokugeki no Souma [21][Ma10p_1080p][x265_flac].TC-CASO&SumiSora.ass
[VCB-Studio] Shokugeki no Souma [22][Ma10p_1080p][x265_flac].TC-CASO&SumiSora.ass
[VCB-Studio] Shokugeki no Souma [23][Ma10p_1080p][x265_flac].TC-CASO&SumiSora.ass
[VCB-Studio] Shokugeki no Souma [24][Ma10p_1080p][x265_flac].TC-CASO&SumiSora.ass

我的替换要求是:

[VCB-Studio] Shokugeki no Souma [xx][Ma10p_1080p][x265_flac].TC-CASO&SumiSora.ass替换为[VCB-Studio] Shokugeki no Souma [xx][Ma10p_1080p][x265_flac].ass,即.TC-CASO&SumiSora需要替换为""(即内容为空白,体现在替换内容中就是什么内容都不输入)。

选中所有相关文件,然后菜单栏File->Rename Special->Search and Replace...

具体操作如下:

你还可以预览下结果:

语法格式:

1
before/now		//文件中含有的"before"替换为"now"

'/'的作用为:

define a string to be replaced by another string, both strings separated by ‘/’.

[案例2] 替换字符串中某个范围的内容

本案例讲解正则表达式的运用,这儿有三个例子:

Example1: 比如有以下文件,需要把之间的内容去掉(包括边界「和」),该如何操作

1
2
3
4
5
6
7
8
9
10
11
12
13
问题儿童都来自异世界? -01 「問題児たちが箱庭にやって来たようですよ?」 BDrip x264-ank.kna.mkv_20201106_184156.071.jpg
问题儿童都来自异世界? -01 「問題児たちが箱庭にやって来たようですよ?」 BDrip x264-ank.kna.mkv_20201106_184206.959.jpg
问题儿童都来自异世界? -04 「黒ウサギがエロイヤらしい奴に狙われたようですよ?」 BDrip x264-ank.mkv_20201107_233735.989.jpg
问题儿童都来自异世界? -04 「黒ウサギがエロイヤらしい奴に狙われたようですよ?」 BDrip x264-ank.mkv_20201107_235627.895.jpg
问题儿童都来自异世界? -04 「黒ウサギがエロイヤらしい奴に狙われたようですよ?」 BDrip x264-ank.mkv_20201107_235634.839.jpg
问题儿童都来自异世界? -05 「誓いは星の彼方にだそうですよ?」 BDrip x264-ank.kna.mkv_20201108_164005.740.jpg
问题儿童都来自异世界? -05 「誓いは星の彼方にだそうですよ?」 BDrip x264-ank.kna.mkv_20201108_220102.628.jpg
问题儿童都来自异世界? -05 「誓いは星の彼方にだそうですよ?」 BDrip x264-ank.kna.mkv_20201108_220119.796.jpg
问题儿童都来自异世界? -05 「誓いは星の彼方にだそうですよ?」 BDrip x264-ank.kna.mkv_20201108_220122.821.jpg
问题儿童都来自异世界? -06 「問題児たちがお祭り騒ぎに参加するようですよ?」 BDrip x264-ank.kna.mkv_20201108_220533.452.jpg
问题儿童都来自异世界? -06 「問題児たちがお祭り騒ぎに参加するようですよ?」 BDrip x264-ank.kna.mkv_20201108_220540.260.jpg
问题儿童都来自异世界? -06 「問題児たちがお祭り騒ぎに参加するようですよ?」 BDrip x264-ank.kna.mkv_20201108_220544.739.jpg
问题儿童都来自异世界? -06 「問題児たちがお祭り騒ぎに参加するようですよ?」 BDrip x264-ank.kna.mkv_20201108_220550.478.jpg

需要用到File->Rename Special->RegExp Rename...的功能。

两种语法格式如下:

1
2
RegExpPattern > ReplaceWith     (case-insensitive: a=A)
RegExpPattern > ReplaceWith\ (case-sensitive)

特别注意: >前后都需要补一个空格,否则不管匹配的正则表达式是正确的,也会出错。

正则表达式用于匹配符合规则的字符。匹配的规则就在正则表达式中,那么匹配时,会按正则表达式锁描述规则从头到尾扫描即将要匹配的字符串。

可以先去正则表达式在线测试 | 菜鸟工具测试下匹配结果:

接着,我们进行使用RegExp Rename...进行替换:

1
2
3
4
5
6
「[\s\S]+」 > 
// \s是匹配所有空白符,包括换行,\S是匹配非空白符,包括换行。
// [\s\S]匹配所有,但只匹配一个满足条件的字符
// +是限定符,用于指定它前面的表达式的匹配次数
// [\s\S]+表示多次匹配所有字符,匹配多个满足条件的字符
//「[\s\S]+」匹配以'「'开头和'」'结尾以及它们之间的所有字符

预览结果:

成功完成替换:

在BDrip前面加上-:

1
\s+BDrip > -BDrip

结果如下:

替换结束。

由于比较特殊,我们考虑下面这种情况:

Example2: 比如形如以下文件,我想要将1和第一个B之间的内容(包括边界1和B)替换空串

1
2
3
4
5
6
7
问题儿童都来自异世界? -061問題児たちがお祭り騒ぎに参加するようですよ?BBDrip x264-ank.kna.mkv_20201108_220550.4781.jpg
问题儿童都来自异世界? -061問題児たちがお祭り騒ぎに参加するようですよ?BBDrip x264-ank.kna.mkv_20201108_220550.4782.jpg
问题儿童都来自异世界? -061問題児たちがお祭り騒ぎに参加するようですよ?BBDrip x264-ank.kna.mkv_20201108_220550.4783.jpg
问题儿童都来自异世界? -061問題児たちがお祭り騒ぎに参加するようですよ?BBDrip x264-ank.kna.mkv_20201108_220550.4784.jpg
问题儿童都来自异世界? -061問題児たちがお祭り騒ぎに参加するようですよ?BBDrip x264-ank.kna.mkv_20201108_220550.4785.jpg
问题儿童都来自异世界? -061問題児たちがお祭り騒ぎに参加するようですよ?BBDrip x264-ank.kna.mkv_20201108_220550.4786.jpg
...

因此,XY RegExp Rename匹配规则如下

1
1[\s\S]+B(?=B) > 

Example3: 形如以下的文件,我想要将[和第一个]之间的内容(包括边界[和])替换空串:

1
2
问题儿童都来自异世界? -06 [問題児たちがお祭り騒ぎに参加するようですよ?]BDrip x264-ank.kna.mkv_20201108_220550.478.jpg
...

因此,XY RegExp Rename匹配规则如下

1
\[[\s\S]+\] > 

你可以参考菜单教程的正则表达式部分进行学习,并且该网站也提供了正则表达式在线测试工具

正则表达式重命名(RegExp Rename...)是一项很强大的功能,它相较于Search and Replace...,有更高的灵活性,可以定制搜索内容的类型和范围,但也提高了使用成本。

此外,XYplorer使用的是VB5 regex engine

XY uses the VB5 regex engine.[?]

为什么桌面的文件无法拖到XY里(管理员权限问题)

Can’t drag folder from Widnows Explorer or Everything to XYporer - XYplorer Beta Club帖子中得知由于XYplorer.exe提升到管理员权限后是无法将桌面文件拖到XY中。由此解决方法就是取消"管理员权限运行"。

具体步骤就是

多个Column的文件列表浏览建议

直接上GIF

从GIF中可以看到当Column变多了,通过加入Shift可以让左右滑动变得更快捷。

右键新建文件

在XY地址栏输入进入"新建项目"的目录

1
<xydata>/NewItems

在cmd中使用Windows的dir命令查询当前目录的文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
D:\PortableApps\XYplorer\Data\NewItems>dir /b
Makefile
New Batch File.bat
New Batch File.cmd
New C Header.h
New C.c
New Configuration.ini
New Cpp.cpp
New folder
New Markdown.md
New Microsoft Excel Worksheet.xlsx
New Microsoft Word Document.docx
New Mindjet MindManager Document-兼容2019版.mmap
New MindManager Document-2020版.mmap
New Rich Text Document.rtf
New Text Document.txt
New XYplorer Script.xys
New.html

以上输出结果都是文件,这些文件都是用于右键菜单"New Items":

这些文件跟Windows右键菜单的新建还不一样,因为存放在"<xydata>/NewItems"中的文件都是模板文件,这意味这你可以按照你的需求进行定制。我举个例子吧:

New C.c模板文件中我写入以下内容:

1
2
3
4
5
6
#include <stdio.h>

int main() {

return 0;
}

以后我右键创建.c文件里面的内容都是按照这个模板文件来的。

对位于同层级的子目录的文件进行批量操作