icacls在DOS for循环中给出了失败的处理错误

时间:2012-02-27 21:15:09

标签: batch-file dos

因此,请尝试在Windows框上进行循环

for /f "tokens=1,2 delims==" %a in ('wmic service list full^|find /i "pathname"^|find /i /v "system32"') do dir %b

这对我来说很好,但是当我使用icacls命令而不是dir时,我得到一个错误,表明icacls无法处理

for /f "tokens=1,2 delims==" %a in ('wmic service list full^|find /i "pathname"^|find /i /v "system32"') do icacls %b

如果我一次针对任何一个输出运行icacls,它可以正常工作

icacls c:\windows\ehome\ehrecvr.exe

我也回应这个命令只是为了确保所有东西看起来都是洁净的而且

for /f "tokens=1,2 delims==" %a in ('wmic service list full^|find /i "pathname"^|find /i /v "system32"') do @echo icacls %b

任何建议?

1 个答案:

答案 0 :(得分:1)

对于我的生活,我无法弄清楚为什么会失败。但是使用do call icacls %b似乎解决了这个问题。

但是服务选项包含在%b中,它们会导致icacl失败,因为它们是icacls的无效选项。

最简单的解决方案似乎是切换到调用子例程的批处理文件。只需处理%1即可删除不需要的选项。

为了安全起见,如果"tokens=1*"出现在任何路径中,最好使用"

@echo off
for /f "tokens=1* delims==" %%a in ('wmic service list full^|find /i "pathname="^|find /i /v "system32"') do call :doit %%b
exit /b

:doit
icacls %1