括号中的 icacls
icacls broken in brackets
这确实有效,但不是我喜欢的格式。下面的代码将实现我想要的。在某些软件需要的任何可写标准用户配置文件中创建一个文件夹(我知道它不会在某些系统配置文件中工作,如默认等),并授予它相关权限。
for /d %%A in ("C:\Users\*") do mkdir "%%~fA\AppData\Local\Folder1"
for /d %%A in ("C:\Users\*") do mkdir "%%~fA\AppData\Local\Folder1_Ltd"
for /d %%A in ("C:\Users\*") do icacls "%%~fA\AppData\Local\Folder1" /T /C /grant(:r) "Everyone":(OI)(CI)(F) /inheritance:e
for /d %%A in ("C:\Users\*") do icacls "%%~fA\AppData\Local\Folder1_Ltd" /T /C /grant(:r) "Everyone":(OI)(CI)(F) /inheritance:e
虽然这似乎有点过头了。我只想让一个循环遍历用户文件夹,然后使用方括号列出命令,为每个函数保存一个用户循环。但是,当我尝试以下操作时,它甚至没有创建文件夹。如果我使用命令行进行调试,它此时会停止在 "everyone" 是意外的。我不确定为什么?欢迎任何建议,谢谢。
for /d %%A in ("C:\Users\*") do (
mkdir "%%~fA\AppData\Local\Folder1"
mkdir "%%~fA\AppData\Local\Folder1_Ltd"
icacls "%%~fA\AppData\Local\Folder1" /T /C /grant(:r) "Everyone":(OI)(CI)(F) /inheritance:e
icacls "%%~fA\AppData\Local\Folder1_Ltd" /T /C /grant(:r) "Everyone":(OI)(CI)(F) /inheritance:e
)
pause
您必须转义(代码块)内的所有右括号,以免被解释为代码块的结尾。
for /d %%A in ("C:\Users\*") do (
mkdir "%%~fA\AppData\Local\Folder1"
mkdir "%%~fA\AppData\Local\Folder1_Ltd"
icacls "%%~fA\AppData\Local\Folder1" /T /C /grant(:r^) "Everyone":(OI^)(CI^)(F^) /inheritance:e
icacls "%%~fA\AppData\Local\Folder1_Ltd" /T /C /grant(:r^) "Everyone":(OI^)(CI^)(F^) /inheritance:e
)
pause
Edit as eryksun 建议使用子例程是一种替代方法(尽管使用编辑器插入 ^
转义符没什么大不了的)
@Echo off
for /d %%A in ("C:\Users\*") do Call :Sub "%%~fA"
pause
Goto :Eof
:Sub
mkdir "%~f1\AppData\Local\Folder1"
mkdir "%~f1\AppData\Local\Folder1_Ltd"
icacls "%~f1\AppData\Local\Folder1" /T /C /grant(:r) "Everyone":(OI)(CI)(F) /inheritance:e
icacls "%~f1\AppData\Local\Folder1_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 ("%%~fA\AppData\Local\Folder1" "%%~fA\AppData\Local\Folder1_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 ("%%~fA\AppData\Local\Folder1" "%%~fA\AppData\Local\Folder1_Ltd") do (
mkdir "%%~fF"
icacls "%%~fF" /T /C "/grant(:r)" "Everyone":"(OI)(CI)(F)" /inheritance:e
)
)
注意:两种情况都在 windows 10 上进行了测试。目前我无法测试 icacls
是否能够处理引用的参数(在/grant
案例)出现在以前的 OS 版本中。
note2:使用 Windows 2003 server SP2 版本 icacls.exe
(第一个版本发布)。正如 eryksun 所指出的,附加引号已被 CRT 删除。
您也可以使用 WMI 仅访问普通用户配置文件:
@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 "%*\AppData\Local\%%A\" (
MD "%*\AppData\Local\%%A")
ICACLS "%*\AppData\Local\%%A" /T /C /Q /grant:r Everyone:(OI^)(CI^)F /inheritance:e)
这确实有效,但不是我喜欢的格式。下面的代码将实现我想要的。在某些软件需要的任何可写标准用户配置文件中创建一个文件夹(我知道它不会在某些系统配置文件中工作,如默认等),并授予它相关权限。
for /d %%A in ("C:\Users\*") do mkdir "%%~fA\AppData\Local\Folder1"
for /d %%A in ("C:\Users\*") do mkdir "%%~fA\AppData\Local\Folder1_Ltd"
for /d %%A in ("C:\Users\*") do icacls "%%~fA\AppData\Local\Folder1" /T /C /grant(:r) "Everyone":(OI)(CI)(F) /inheritance:e
for /d %%A in ("C:\Users\*") do icacls "%%~fA\AppData\Local\Folder1_Ltd" /T /C /grant(:r) "Everyone":(OI)(CI)(F) /inheritance:e
虽然这似乎有点过头了。我只想让一个循环遍历用户文件夹,然后使用方括号列出命令,为每个函数保存一个用户循环。但是,当我尝试以下操作时,它甚至没有创建文件夹。如果我使用命令行进行调试,它此时会停止在 "everyone" 是意外的。我不确定为什么?欢迎任何建议,谢谢。
for /d %%A in ("C:\Users\*") do (
mkdir "%%~fA\AppData\Local\Folder1"
mkdir "%%~fA\AppData\Local\Folder1_Ltd"
icacls "%%~fA\AppData\Local\Folder1" /T /C /grant(:r) "Everyone":(OI)(CI)(F) /inheritance:e
icacls "%%~fA\AppData\Local\Folder1_Ltd" /T /C /grant(:r) "Everyone":(OI)(CI)(F) /inheritance:e
)
pause
您必须转义(代码块)内的所有右括号,以免被解释为代码块的结尾。
for /d %%A in ("C:\Users\*") do (
mkdir "%%~fA\AppData\Local\Folder1"
mkdir "%%~fA\AppData\Local\Folder1_Ltd"
icacls "%%~fA\AppData\Local\Folder1" /T /C /grant(:r^) "Everyone":(OI^)(CI^)(F^) /inheritance:e
icacls "%%~fA\AppData\Local\Folder1_Ltd" /T /C /grant(:r^) "Everyone":(OI^)(CI^)(F^) /inheritance:e
)
pause
Edit as eryksun 建议使用子例程是一种替代方法(尽管使用编辑器插入 ^
转义符没什么大不了的)
@Echo off
for /d %%A in ("C:\Users\*") do Call :Sub "%%~fA"
pause
Goto :Eof
:Sub
mkdir "%~f1\AppData\Local\Folder1"
mkdir "%~f1\AppData\Local\Folder1_Ltd"
icacls "%~f1\AppData\Local\Folder1" /T /C /grant(:r) "Everyone":(OI)(CI)(F) /inheritance:e
icacls "%~f1\AppData\Local\Folder1_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 ("%%~fA\AppData\Local\Folder1" "%%~fA\AppData\Local\Folder1_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 ("%%~fA\AppData\Local\Folder1" "%%~fA\AppData\Local\Folder1_Ltd") do (
mkdir "%%~fF"
icacls "%%~fF" /T /C "/grant(:r)" "Everyone":"(OI)(CI)(F)" /inheritance:e
)
)
注意:两种情况都在 windows 10 上进行了测试。目前我无法测试 icacls
是否能够处理引用的参数(在/grant
案例)出现在以前的 OS 版本中。
note2:使用 Windows 2003 server SP2 版本 icacls.exe
(第一个版本发布)。正如 eryksun 所指出的,附加引号已被 CRT 删除。
您也可以使用 WMI 仅访问普通用户配置文件:
@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 "%*\AppData\Local\%%A\" (
MD "%*\AppData\Local\%%A")
ICACLS "%*\AppData\Local\%%A" /T /C /Q /grant:r Everyone:(OI^)(CI^)F /inheritance:e)