将“删除空文件夹”添加到Windows上下文菜单

7
我希望能够在上下文菜单中添加这个好的Shell脚本,该脚本可以自动删除它所在的文件夹下所有空文件夹和子文件夹:
for /f "usebackq delims=" %%d in (`"dir /ad/b/s | sort /R"`) do rd "%%d"

为了将此项添加到(目录)上下文菜单中,我需要运行一个扩展名为reg的文件,其内容类似于:
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\Delete empty folders]

[HKEY_CLASSES_ROOT\Directory\shell\Delete empty folders\Command]
@=for /f "usebackq delims=" %%d in (`"dir %1 /ad/b/s | sort /R"`) do rd "%%d"

但是这个不起作用。应该如何修复以正确运行一行式的shell脚本?

将代码放入一个 .bat 文件中,将 bat 文件和参数标识符放入注册表键中。 - Alex K.
1
@Alex:通过使用剩余的命令行调用 cmd /c 应该是可行的。 - Joey
@Joey 使用 @="cmd /c for /f \"usebackq delims=\" %%d in (\"dir %1 /ad/b/s | sort /R"`) do rd "%%d""` 我成功删除了某些位置的空文件夹,但不是所有位置,你能详细说明吗? - mmj
@Joey 看起来你也需要用双引号括起来参数 %1,即 \"%1\" - mmj
2个回答

8

感谢Joey的评论,我找到了以下解决方案。

步骤1:创建一个带有reg扩展名的文件(例如add_delete_empty_folders_to_context_menu.reg),并在其中放入以下行:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\Delete empty folders]

[HKEY_CLASSES_ROOT\Directory\shell\Delete empty folders\Command]
@="cmd /c for /f \"usebackq delims=\" %%d in (`\"dir \"%1\" /ad/b/s | sort /R\"`) do rd \"%%d\""

步骤2:双击您的reg文件,并提供所有必要的确认。

现在,当您右键单击目录时,您的上下文菜单中将出现一个方便的Delete empty folders命令。这对我在Windows 7和Windows 10上有效。

避免滥用此功能,有些软件需要其空文件夹才能正常工作。

跟进

如果您遇到问题(如Enora所述),您可以尝试在reg文件中使用以下行,代替原始行:

@="cmd.exe /K for /f \"usebackq delims=\" %%d in (`\"dir \"%V\" /ad/b/s | sort /R\"`) do rd \"%%~d\""

实际上我不知道这个版本是否更加健壮,我在这里报告Enora为她特定情况找到的解决方案


这个一行脚本在我的Windows 7上不起作用。我已经完成了步骤1和步骤2,并且在我的上下文菜单中有“删除空文件夹”,但是当我选择它时,一个cmd窗口打开并显示以下错误:.. was unexpected at this time. 你知道在@="cmd /c for /f \"usebackq delims=\" %%d in ("dir "%1" /ad/b/s | sort /R") do rd \"%%d\""中的哪里出了问题吗? - MagTun
@Arone我看不到你报告的字符串中需要的反引号(也称为 backtick)字符(`),请确保输入。如果您在键盘上没有它(像我一样),则可以在按下左ALT键时键入96来打印它。 - mmj
感谢您的时间@mmj。我的代码中有(`),但是由于SO评论中将其视为“代码”的迷你Markdown格式,因此它被认为是在代码中。我复制粘贴了您的代码,所以我和您的代码完全一样! - MagTun
@Arone 那我不知道可能出了什么问题。为了找出是否可以重现您的问题,请尝试在不同的目录和磁盘上进行操作,并在另一个安装程序上尝试该过程(如果可以)。您还可以创建一个 delete_empty_folders.bat 文件,其中包含一行 for /f "usebackq delims=" %%d in (\"dir /ad/b/s | sort /R"`) do rd "%%d"`,将其复制并从父目录运行,看看原始批处理DOS是否起作用。 - mmj
1
我成功让上下文菜单工作了。https://dev59.com/nJLea4cB1Zd3GeqP6shK - MagTun
显示剩余7条评论

-2

E ia ora na tatou

这里还有另一种方法:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\MenuDelZem]
"MUIVerb"="Supprimer les dossiers vides"
"Icon"="imageres.dll,-89"
"ExtendedSubCommandsKey"="Directory\\ContextMenus\\MenuCmd"

[HKEY_CLASSES_ROOT\Directory\background\shell\MenuDelZem]
"MUIVerb"="Supprimer les dossiers vides"
"Icon"="imageres.dll,-89"
"ExtendedSubCommandsKey"="Directory\\ContextMenus\\MenuCmd"

[HKEY_CLASSES_ROOT\Directory\ContextMenus\MenuCmd\shell\open]
"MUIVerb"="Supprimez-les "
"Icon"="imageres.dll,-89"

[HKEY_CLASSES_ROOT\Directory\ContextMenus\MenuCmd\shell\open\command]
@="cmd /c ROBOCOPY . .  /S /MOVE"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接