我用这个创建了一个.reg,在我的上下文菜单中添加了一个Delete empty folders
命令。当我右键单击文件夹时,应删除其空子文件夹。
我在上下文菜单中有“删除空文件夹”但是当我选择此项时,cmd窗口打开并且我收到此错误:..此时是意外的。 知道为什么吗?
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\""
代码来自@mmj(here)
编辑:感谢JosephZ帮助,这是解决方案:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Directory\shell\Delete empty folders]
[HKEY_CLASSES_ROOT\Directory\shell\Delete empty folders\Command]
@="cmd.exe /K for /f \"usebackq delims=\" %%d in (`\"dir \"%V\" /ad/b/s | sort /R\"`) do rd \"%%~d\""
答案 0 :(得分:2)
我不理解您的代码失败的原因。出于调试目的:下一个.reg
工作:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Directory\shell\List all subfolders2]
[HKEY_CLASSES_ROOT\Directory\shell\List all subfolders2\command]
@="cmd.exe /K for /f \"usebackq delims=\" %%d in (`\"dir \"%V\" /ad/b/s | sort /R\"`) do @echo \"%%~d\""
对您的代码所做的更改:
cmd.exe
代替cmd
; /K
切换到保持命令提示符窗口打开; %V
代替%1
,但也与%1
合作; @echo
而不是rd
因为我不想删除任何目录,即使是空的(仅用于调试); %%~d
代替%%d
。另一种逃避方法:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Directory\shell\List all subfolders]
[HKEY_CLASSES_ROOT\Directory\shell\List all subfolders\command]
@="cmd.exe /S /K \"for /f \"delims=\" %%d in ('dir \"%V\" /ad/b/s ^| sort /R') do @echo \"%%~d\"\""
摘自cmd /?
:
如果指定了
/C
或/K
,那么命令行的其余部分 将交换机作为命令行处理后,执行以下操作 logic用于处理引用("
)字符:
如果满足以下所有条件,则会保留命令行中的引号字符:
- 没有
/S
开关- 正好两个引号字符
- 两个引号字符之间没有特殊字符,其中special是以下之一:
&<>()@^|
- 两个引号字符之间有一个或多个空格字符
- 两个引号字符之间的字符串是可执行文件的名称。
- 醇>
否则,旧行为是查看第一个字符是否为引号字符,如果是,则删除前导字符并删除 命令行上的最后一个引号字符,保留后面的任何文本 最后一个引号字符。
修改:解决方案(由OP Arone建议的时间之后):
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Directory\shell\Delete empty folders]
[HKEY_CLASSES_ROOT\Directory\shell\Delete empty folders\Command]
@="cmd.exe /K for /f \"usebackq delims=\" %%d in (`\"dir \"%V\" /ad/b/s | sort /R\"`) do rd \"%%~d\""
答案 1 :(得分:0)
dir命令解析为
`"dir "%1" /ad/b/s | sort /R"`
但应解决
`dir "%1" /ad/b/s | sort /R`
因此它应该是
`dir \"%1\" /ad/b/s | sort /R`
更新:如果您有批处理工作,为什么不从上下文菜单中调用它?