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

Batch file icacls在DOS for循环中给出失败的处理错误,batch-file,dos,Batch File,Dos,因此,请在Windows框上尝试此for循环 for/f“tokens=1,2 delims==%a in('wmic服务列表已满^ | find/i“pathname”^ | find/i/v“system32”)do dir%b 这对我来说很好,但是当我使用icacls命令而不是dir时,我得到一个错误,表明icacls无法处理 for/f“tokens=1,2 delims==%a in('wmic服务列表已满^ | find/i“pathname”^ | find/i/v“system3

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

for/f“tokens=1,2 delims==%a in('wmic服务列表已满^ | find/i“pathname”^ | find/i/v“system32”)do dir%b

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

for/f“tokens=1,2 delims==%a in('wmic服务列表已满^ | find/i“pathname”^ | find/i/v“system32”)是否执行icacls%b

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

icacls c:\windows\ehome\ehrecvr.exe

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

for/f“tokens=1,2 delims==%a in('wmic服务列表已满^ | find/i“pathname”^ | find/i/v“system32”)do@echo icacls%b


有什么建议吗?

就我个人而言,我不明白为什么会失败。但是使用
do call icacls%b
似乎可以解决这个问题

但是服务选项包含在%b中,它们会导致icacls失败,因为它们是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

就我个人而言,我不知道为什么会失败。但是使用
do call icacls%b
似乎可以解决这个问题

但是服务选项包含在%b中,它们会导致icacls失败,因为它们是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

你没有读Ed的帖子
wmic
在末尾追加一个回车字符,您的
调用将删除itdbenham,感谢您的反馈。我无法理解此操作失败的原因,但是调用“do call icacls%b”会失败,或者我可以从朋友处调用“do cmd.exe/c icacls%b”。此外,目前这种情况与具有选项/开关的服务不同,我的朋友建议将带有“for/f”标记=2 delims='='='%a的文本文件输出到('wmic service list full^ find/i“pathname”^ find/i/v“system32“)do@echo%a>>c:\windows\temp\calcs.txt”,然后用这一行“for/f eol^=^”^ delims^=^解析该输出(c:\windows\temp\calcs.txt)do cmd.exe/c cacls“%a”。希望这对其他人有帮助。你没有读过Ed的帖子!
wmic
在末尾添加了回车符,你的
调用将删除itdbenham,谢谢你的反馈。我想不出为什么会失败,但调用“do CALL icacls%b”您也可以“do cmd.exe/c icacls%b”从朋友处获得。目前,这与具有选项/开关的服务不同,我的朋友建议将带有“for/f”标记的文本文件输出到文本文件中,其中“for/f”标记=2 delims='='''''%a in('wmic服务列表完整^ find/I“pathname”^ find/I/v“system32')do@echo%a>>c:\windows\temp\calcs.txt“然后在(c:\windows\temp\calcs.txt)do cmd.exe/c cacls“%a”中用此行“for/f eol^=^“^delims^=^”%a分析该输出。希望这对其他人有所帮助。