我正在创建一个批处理脚本,以从系统上的所有本地固定磁盘中从所有目录(而不是单个文件)中提取权限。这是有效的;我能够创建一个列出所有本地固定NTFS分区的临时文件。我可以从该临时文件(通常是C:驱动器)中删除第一行,并针对它运行DIR命令,并且对其进行了ICACLS/CACLS命令。我遇到的问题是,它不会回到dir命令和iCACLS/cacls命令上,以针对临时文件中列出的任何其他驱动器。任何帮助,将不胜感激。这是我的脚本:
wmic logicaldisk get caption, drivetype, filesystem | find "3" | find "NTFS" | find /v "Caption" > "tmp_drives.txt"
setlocal enableDelayedExpansion
for /f "delims=:" %%A in (tmp_drives.txt) do (
dir %%A: /ad /s /b >> "%%A_dir.txt"
set drive=%%A
if exist "%systemroot%system32icacls.exe" goto icacls
for /f "tokens=* usebackq" %%J in ("!drive!_dir.txt") do cacls "%%J" | find /v "GENERIC_READ" | find /v "GENERIC_EXECUTE" >> "!drive!_Permissions.txt"
goto end
:icacls
for /f "tokens=* usebackq" %%J in ("!drive!_dir.txt") do icacls "%%J" | find /i /v "Successfully" >> "!drive!_Permissions.txt"
:end
)
setlocal disableDelayedExpansion
del tmp_drives.txt
pause
wmic logicaldisk get caption, drivetype, filesystem | find "3" | find "NTFS" | find /v "Caption" > "tmp_drives.txt"
setlocal enableDelayedExpansion
for /f "delims=:" %%A in (tmp_drives.txt) do (
dir %%A: /ad /s /b >> "%%A_dir.txt"
set drive=%%A
if exist "%systemroot%system32icacls.exe" (
for /f "tokens=* usebackq" %%J in ("!drive!_dir.txt") do icacls "%%J" | find /i /v "Successfully" >> "!drive!_Permissions.txt"
) else (
for /f "tokens=* usebackq" %%J in ("!drive!_dir.txt") do cacls "%%J" | find /v "GENERIC_READ" | find /v "GENERIC_EXECUTE" >> "!drive!_Permissions.txt"
)
)
setlocal disableDelayedExpansion
del tmp_drives.txt
pause
我确实不喜欢代码块中的标签。我相信,在某些版本下,它们不起作用并终止块。尝试一下 - 它只是您的原始版本的编辑版本,但没有标签。