【问题标题】:error "\.. was unexpected at this time"错误“\..此时出乎意料”
【发布时间】:2016-01-07 16:03:45
【问题描述】:

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

【问题讨论】:

  • 如果使用完全限定的C:\Windows\system32\cmd.exe 而不是cmd 会怎样?
  • @JosefZ 我用@="C:\Windows\system32\cmd.exe /c for /f 替换了@="cmd /c for /f,但这并没有改变任何东西。

标签: cmd windows-7 registry


【解决方案1】:

我不明白为什么您的代码会失败。出于调试目的:两个下一个.regs 工作:

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,则命令行的其余部分 切换后作为命令行处理,其中以下 逻辑用于处理引号(")字符:

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

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

编辑:解决方案(由 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\""

【讨论】:

    【解决方案2】:

    dir 命令解析为

    `"dir "%1" /ad/b/s | sort /R"`
    

    但应该解析为

    `dir "%1" /ad/b/s | sort /R`
    

    应该是这样的

     `dir \"%1\" /ad/b/s | sort /R`
    

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

    【讨论】:

    • 谢谢!但现在我收到错误: was unexpected at this time。我的代码中没有看到任何:!带有 : for /f "usebackq delims=" %%d in (`"dir /ad/b/s | sort /R"`) do rd "%%d" 的 bat 文件确实可以工作。但我正在尝试让上下文菜单起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-11
    • 2021-12-04
    • 1970-01-01
    • 2018-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多