如何直接进入到最后一个文件夹

假设现在有这么一个目录结构 a/b/c/d/e/f/g.txt ,怎样才能在双击a的时候,直接定位到f文件夹,而不需要一层一层打开?
就是忽略中间所有只包含一个文件夹的文件夹,打开最深的一个,不符合条件的文件夹
我现在用的是QTTabBar,可以实现这个功能吗?
或者通过其他方式,能实现吗?比如ahk什么的

就是直接打开最里面的那层子文件夹?

这种要么是直接搜索要么就是直接显示最底层的文件

搜索的话,listary可以在当前目录搜索
直接显示文件tc有这个功能,qttabbar就不知道了

我觉得这种有个问题啊,软件大概率无法解决,就是你没办法保证每一层的子文件夹只有一个,那么软件如何决定进入哪一个文件夹呢?

可能最好的办法还是搜索

但是根据逻辑来讲,软件没办法做决断啊,比如有两个只有文件的文件夹

就是忽略中间所有只包含一个文件夹的文件夹,打开最深的一个,(非(只包含一个文件夹))的文件夹
就是如果当前文件夹只有一个文件夹,就继续进入,否则停止

我理解你的意思。

Qttabbar 的话, 双击不行. 你可以用它的文件夹预览按钮折中实现.

image

说白了就是github的模式。挺有用的。
我原先魔改过安卓amaze文件管理器增加这种功能。

嗯,github,vscode 的文件模式就是这样的。不过还真没见过资源管理器之类的应用是这么处理的。

AHK能解决,但是没有通用性,因为大部分文件结构并不是这样的.
这个会直接进入最后一个 (只含一个文件 或 含有 多个文件或多个文件夹的) 的文件夹

AHKV2

path := "D:\a"

loop
{
  count := 0
  loop files path "\*.*", "DF"
    count := A_Index, _path := A_LoopFileFullPath, isFolderBool := DirExist(A_LoopFileFullPath)
  if count = 1 && isFolderBool
    path := _path
  else if count > 1 || !isFolderBool
  {
    Run(path)
    break
  }
}

自己通过脚本解决了。将下面的代码保存为js文件,放到合适的地方,然后将文件拖到命令栏,就行了。点击即可运行。
需要注意的是,系统不能有js文件的默认打开方式,有的话清除一下。如果弹窗乱码的话,把文件保存为gbk编码。

var qs = new ActiveXObject("QTTabBarLib.Scripting");
var fso = new ActiveXObject("Scripting.FileSystemObject");
var wnd = qs.activewindow;
if (wnd) {
    var activeTab = wnd.ActiveTab;
    var selectedItems = wnd.SelectedItems
    var currentPath = activeTab.Path;
    var selectedFolderPath = ""

    if (selectedItems.Count == 1) {
        var curPath = selectedItems.Item(0);
        if (fso.FolderExists(curPath)) {
            currentPath = curPath;
            selectedFolderPath = curPath;
        }
    }

    while (onlyOneFolder(currentPath)) {
        var currentFolderObject = fso.GetFolder(currentPath);
        var enumerator = new Enumerator(currentFolderObject.SubFolders);
        for (; !enumerator.atEnd(); enumerator.moveNext()) {
            currentPath = enumerator.item().Path;
        }
    }
    if (currentPath != activeTab.Path && currentPath != selectedFolderPath) {
        qs.InvokeCommand("OpenInPlace", currentPath);
    } else {
        qs.alert("当前目录并非只有一个文件夹");
    }
}

function onlyOneFolder(currentPath) {
    var currentFolderObject = fso.GetFolder(currentPath);
    var folderCount = currentFolderObject.SubFolders.Count;
    var fileCount = currentFolderObject.Files.Count;
    var result = fileCount == 0 && folderCount == 1
    return result;
}
1 Like