icacls дает ошибку обработки в DOS для цикла - PullRequest
1 голос
/ 28 февраля 2012

Так что попробуйте это для цикла на вашем 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 Ответ

1 голос
/ 28 февраля 2012

За свою жизнь я не могу понять, почему это не удается.Но использование 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
...