这实际上是工作,但不是我喜欢的格式。 下面的代码将实现我想要的。 使任何可写的标准用户configuration文件(我知道它不会在某些系统configuration文件,如默认等工作),一些软件需要的文件夹,也给了相关权限。
for /d %%A in ("C:Users*") do mkdir "%%~fAAppDataLocalFolder1" for /d %%A in ("C:Users*") do mkdir "%%~fAAppDataLocalFolder1_Ltd" for /d %%A in ("C:Users*") do icacls "%%~fAAppDataLocalFolder1" /T /C /grant(:r) "Everyone":(OI)(CI)(F) /inheritance:e for /d %%A in ("C:Users*") do icacls "%%~fAAppDataLocalFolder1_Ltd" /T /C /grant(:r) "Everyone":(OI)(CI)(F) /inheritance:e
这似乎有点超过顶部虽然。 我想通过用户文件夹只有一个循环,然后使用括号列出命令,为每个function保存一个用户循环。 但是,当我尝试下面,它甚至不会使文件夹。 如果我使用命令行进行debugging,那么在这个时候停止在“所有人”是意外的。 我不知道为什么? 任何意见,欢迎,谢谢。
for /d %%A in ("C:Users*") do ( mkdir "%%~fAAppDataLocalFolder1" mkdir "%%~fAAppDataLocalFolder1_Ltd" icacls "%%~fAAppDataLocalFolder1" /T /C /grant(:r) "Everyone":(OI)(CI)(F) /inheritance:e icacls "%%~fAAppDataLocalFolder1_Ltd" /T /C /grant(:r) "Everyone":(OI)(CI)(F) /inheritance:e ) pause
在Windows批处理编程中读取文件名
在Windows命令行上通过putty.exe运行一个shell脚本(带参数)
保持Y的X实例始终在运行,窗口
使用DOS / Batch分割具有随机长度的string
如何将控制台输出redirect到文件,并仍然在控制台中获取?
batch file创build备份并用时间戳重命名
Windowsbatch file中的FOR / F循环出现问题
批处理 – 从单词中创build字符
@Echo Off For /F "Skip=1 Delims=" %%A In ( '"WMIc Path Win32_UserProfile Where (Special!='True') Get LocalPath"' ) Do For /F "Delims=" %%B In ("%%A") Do Call :Sub %%B Pause>Nul GoTo :EOF :Sub For %%A In (Folder1 Folder1_Ltd) Do (If Not Exist "%*AppDataLocal%%A" ( MD "%*AppDataLocal%%A") ICACLS "%*AppDataLocal%%A" /T /C /Q /grant:r Everyone:(OI^)(CI^)F /inheritance:e)
您必须将(代码块)内的所有关闭的括号转义为不被解释为块的结尾。
for /d %%A in ("C:Users*") do ( mkdir "%%~fAAppDataLocalFolder1" mkdir "%%~fAAppDataLocalFolder1_Ltd" icacls "%%~fAAppDataLocalFolder1" /T /C /grant(:r^) "Everyone":(OI^)(CI^)(F^) /inheritance:e icacls "%%~fAAppDataLocalFolder1_Ltd" /T /C /grant(:r^) "Everyone":(OI^)(CI^)(F^) /inheritance:e ) pause
编辑为eryksun建议使用子例程是一种替代方案(虽然使用编辑器来插入^转义是没有什么大不了的)
@Echo off for /d %%A in ("C:Users*") do Call :Sub "%%~fA" pause Goto :Eof :Sub mkdir "%~f1AppDataLocalFolder1" mkdir "%~f1AppDataLocalFolder1_Ltd" icacls "%~f1AppDataLocalFolder1" /T /C /grant(:r) "Everyone":(OI)(CI)(F) /inheritance:e icacls "%~f1AppDataLocalFolder1_Ltd" /T /C /grant(:r) "Everyone":(OI)(CI)(F) /inheritance:e
@echo off setlocal enableextensions disabledelayedexpansion for /d %%A in ("C:Users*") do ( for %%F in ("%%~fAAppDataLocalFolder1" "%%~fAAppDataLocalFolder1_Ltd") do ( mkdir "%%~fF" icacls "%%~fF" /T /C /grant:r "Everyone":"(OI)(CI)(F)" /inheritance:e ) )
如果你想保留grant开关的括号,那么你可以
@echo off setlocal enableextensions disabledelayedexpansion for /d %%A in ("C:Users*") do ( for %%F in ("%%~fAAppDataLocalFolder1" "%%~fAAppDataLocalFolder1_Ltd") do ( mkdir "%%~fF" icacls "%%~fF" /T /C "/grant(:r)" "Everyone":"(OI)(CI)(F)" /inheritance:e ) )
注意 :这两种情况都在Windows 10上测试过。现在我无法测试在以前的操作系统版本中是否存在处理带引号的参数(在/grant情况下)的icacls性。
note2 :与Windows 2003服务器SP2版本的icacls.exe (发布的第一个版本)进行无问题测试(以及/inheritance开关不存在)。 正如eryksun指出的那样,额外的引号被CRT删除。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。