【问题标题】:icacls C:\Users\%username%\AppData\Local\Mozilla\updates /q /c /t /deny users:Ficacls C:\Users\%username%\AppData\Local\Mozilla\updates /q /c /t /deny users:F
【发布时间】:2017-04-30 06:01:55
【问题描述】:

我想拒绝当前用户访问、修改、读取提到的文件夹的权限。使用 icacls。 icacls C:\Users\%username%\AppData\Local\Mozilla\updates /q /c /t /deny users:F 但我收到错误“系统找不到指定的路径

任何人都可以在这方面帮助我。

【问题讨论】:

  • 用户可能仍然可以删除文件,因为删除子访问权限可能是由父文件夹授予的。

标签: cmd folder-permissions icacls cacls


【解决方案1】:

由于您没有提供太多信息,所以我的回答将是一个猜测。

“系统找不到指定的路径”

这显然意味着路径不存在。但是,有一个例外:带有空格的路径。要让cmdbatch file 正确处理空间,您需要"quote" 他们。而且,正如@Mofi 提到的,可能是用户的个人资料目录不是C:\Users\%USERNAME%

所以我最好的猜测是解决这两个问题,您应该将命令更改为:

icacls "C:\Users\%Username%\AppData\Local\Mozilla\updates" /q /c /t /deny users:F

或者@Mofi 建议的这个更好的解决方案:

icacls "%LOCALAPPDATA%\Mozilla\updates" /q /c /t /deny users:F

【讨论】:

  • 缺少双引号很可能是用户名包含命令行关键字符(如空格字符或与号)的原因。另一种可能是用户的配置文件目录不是C:\Users\%USERNAME%。所以最好使用icacls "%USERPROFILE%\AppData\Local\Mozilla\updates" /q /c /t /deny users:F 或最好的icacls "%LOCALAPPDATA%\Mozilla\updates" /q /c /t /deny users:F。请参阅有关Windows Environment Variables 的维基百科章节。
  • 除了dir等内置命令外,cmd不关心命令参数中的空格。它不是将命令行拆分为 argv 数组的 POSIX shell。每个 Windows 程序都必须进行自己的命令行解析,VC++ argv 规则是典型的。也就是说,引号也会转义 shell 中的其他特殊字符,例如 & -- 但不是命令行上的 %。百分比只能在批处理文件中可靠地转义,将其加倍为 %% 就可以了。
  • @eryksun 如果不把参数一起引用,exe会看到这个:C:\Users\Spaced -arg1/Username\blah -arg2//q -arg3...哪个错了
  • 是的,但这与 cmd shell 无关。可执行文件负责解析自己的命令行。
  • ICACLS name [/grant[:r] Sid:perm[...]] [/deny Sid:perm [...]] [/remove[:g|:d]] Sid[...]] [/T] [/C] [/L] [/Q] [/setintegritylevel Level:policy[...]] name 是一个参数,而不是多个参数。
猜你喜欢
  • 2020-01-07
  • 1970-01-01
  • 2018-12-04
  • 1970-01-01
  • 2017-05-08
  • 2014-08-03
  • 2020-02-21
  • 1970-01-01
  • 2019-11-21
相关资源
最近更新 更多