通过 Windows 资源管理器上下文菜单调用自定义存档程序
Call custom archive program through Windows Explorer context menue
我在 Windows 上安装了一个 Linux SMB。 Linux SMB 服务器配置为支持
区分大小写的文件名。 Linux SMB 共享包含一些源文件,例如:
$ ls dir
test.txt Test.txt TesT.txt
Windows 文件资源管理器正确处理这些文件。当我通过 Ctr-c 复制它们或移动它们时,它们会按预期处理。
我现在想 归档 来自 Windows 文件资源管理器的一些目录,方法是右键单击并在 上下文菜单。 sourcetree 很大,我不想通过 cmdline 导航。
所以我发现:
- WinRar 仅在选择 'Add to archive...' 然后选择
zip
格式时支持压缩文件中区分大小写的文件名。对于 Rar
格式,它将抱怨相同的小写名称。
- 7zip 根本不支持任何格式的区分大小写的文件名。总是让人心疼。
因为我习惯了 tar.gz
我更愿意创建 tar.gz beeing。所以我有这些问题:
- 是否有存档程序在 Windows 文件资源管理器中注册上下文菜单操作,创建 tar.gz|tar.bz2 和支持区分大小写的文件名?
- 是否有可能注册我自己的 Windows 文件资源管理器 插件,也许写成 JScript,这样我就可以调用例如 cygwin's
tar -czvf dirname.tar.gz dirname
通过上下文菜单获取 file/dirname 作为参数?如果 write/register 这样的插件不太困难,那将是首选解决方案。
我使用注册表添加了上下文菜单:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Directory\shell\ArchiveTarGz]
@="[> Archive tar.gz "
[HKEY_CLASSES_ROOT\Directory\shell\ArchiveTarGz\command]
@="\"C:\cygwin64\bin\mintty.exe\" \"-i\" \"/Cygwin-Terminal.ico\" \"/bin/bash\" \"--login\" \"-i\" \"-c\" \"sh /cygdrive/c/ctxmenue.sh '%1' gz\""
[HKEY_CLASSES_ROOT\Directory\shell\ArchiveTarBz2]
@="[> Archive tar.bz2 "
[HKEY_CLASSES_ROOT\Directory\shell\ArchiveTarBz2\command]
@="\"C:\cygwin64\bin\mintty.exe\" \"-i\" \"/Cygwin-Terminal.ico\" \"/bin/bash\" \"--login\" \"-i\" \"-c\" \"sh /cygdrive/c/ctxmenue.sh '%1' bz2\""
将上面的内容保存在r.reg
中并执行。同时创建 /cygdrive/c/ctxmenue.sh
:
#!/bin/sh
f=$(cygpath -u "${1//\/\\}")
d=$(dirname "$f")
b=$(basename "$f")
case in
gz) ( cd "$d"; tar -cvzf "${b}.tar." "${b}" );;
bz2) ( cd "$d"; tar -cvjf "${b}.tar." "${b}" );;
*) ( cd "$d"; tar -cvf "${b}.tar" "${b}" );;
esac
我在 Windows 上安装了一个 Linux SMB。 Linux SMB 服务器配置为支持
区分大小写的文件名。 Linux SMB 共享包含一些源文件,例如:
$ ls dir
test.txt Test.txt TesT.txt
Windows 文件资源管理器正确处理这些文件。当我通过 Ctr-c 复制它们或移动它们时,它们会按预期处理。
我现在想 归档 来自 Windows 文件资源管理器的一些目录,方法是右键单击并在 上下文菜单。 sourcetree 很大,我不想通过 cmdline 导航。
所以我发现:
- WinRar 仅在选择 'Add to archive...' 然后选择
zip
格式时支持压缩文件中区分大小写的文件名。对于Rar
格式,它将抱怨相同的小写名称。 - 7zip 根本不支持任何格式的区分大小写的文件名。总是让人心疼。
因为我习惯了 tar.gz
我更愿意创建 tar.gz beeing。所以我有这些问题:
- 是否有存档程序在 Windows 文件资源管理器中注册上下文菜单操作,创建 tar.gz|tar.bz2 和支持区分大小写的文件名?
- 是否有可能注册我自己的 Windows 文件资源管理器 插件,也许写成 JScript,这样我就可以调用例如 cygwin's
tar -czvf dirname.tar.gz dirname
通过上下文菜单获取 file/dirname 作为参数?如果 write/register 这样的插件不太困难,那将是首选解决方案。
我使用注册表添加了上下文菜单:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Directory\shell\ArchiveTarGz]
@="[> Archive tar.gz "
[HKEY_CLASSES_ROOT\Directory\shell\ArchiveTarGz\command]
@="\"C:\cygwin64\bin\mintty.exe\" \"-i\" \"/Cygwin-Terminal.ico\" \"/bin/bash\" \"--login\" \"-i\" \"-c\" \"sh /cygdrive/c/ctxmenue.sh '%1' gz\""
[HKEY_CLASSES_ROOT\Directory\shell\ArchiveTarBz2]
@="[> Archive tar.bz2 "
[HKEY_CLASSES_ROOT\Directory\shell\ArchiveTarBz2\command]
@="\"C:\cygwin64\bin\mintty.exe\" \"-i\" \"/Cygwin-Terminal.ico\" \"/bin/bash\" \"--login\" \"-i\" \"-c\" \"sh /cygdrive/c/ctxmenue.sh '%1' bz2\""
将上面的内容保存在r.reg
中并执行。同时创建 /cygdrive/c/ctxmenue.sh
:
#!/bin/sh
f=$(cygpath -u "${1//\/\\}")
d=$(dirname "$f")
b=$(basename "$f")
case in
gz) ( cd "$d"; tar -cvzf "${b}.tar." "${b}" );;
bz2) ( cd "$d"; tar -cvjf "${b}.tar." "${b}" );;
*) ( cd "$d"; tar -cvf "${b}.tar" "${b}" );;
esac