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%\system32\icacls.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
I do so dislike labels within a code block. I believe that under some editions, they don't work and terminate the block. Try this - it's just an edited version of your original but without the labels.