错误“\ ..此时出乎意料”

时间:2016-01-07 16:03:45

标签: cmd windows-7 registry

我用这个创建了一个.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\""

2 个答案:

答案 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用于处理引用(")字符:

     
      
  1. 如果满足以下所有条件,则会保留命令行中的引号字符:

         
        
    • 没有/S开关
    •   
    • 正好两个引号字符
    •   
    • 两个引号字符之间没有特殊字符,其中special是以下之一:&<>()@^|
    •   
    • 两个引号字符之间有一个或多个空格字符
    •   
    • 两个引号字符之间的字符串是可执行文件的名称。
    •   
  2.   
  3. 否则,旧行为是查看第一个字符是否为引号字符,如果是,则删除前导字符并删除   命令行上的最后一个引号字符,保留后面的任何文本   最后一个引号字符。

  4.   

修改:解决方案(由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`

更新:如果您有批处理工作,为什么不从上下文菜单中调用它?