0

システム上のローカルに固定されたすべてのディスクから、すべてのディレクトリ (個々のファイルではなく) から権限を取得するバッチ スクリプトを作成しています。これが機能するものです。ローカルに固定されたすべての 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%\system32\icacls.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
4

1 に答える 1

0
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

私はコード ブロック内のラベルが嫌いです。一部のエディションでは、それらが機能せず、ブロックが終了すると思います。これを試してみてください - これはオリジナルを編集したものですが、ラベルはありません。

于 2014-01-28T18:06:35.693 に答える