修改批处理脚本以影响所有用户帐户

Modifying a batch script to affect all user accounts

我找到了一个用于删除 firefox cookie 和网络缓存的脚本来解决我们在我支持的许多机器上遇到的问题,我需要修改脚本以影响所有用户文件夹而不是当前用户。是否可以通过简洁的命令或更改来访问所有用户文件夹?

@echo off
set DataDir=C:\Users\%USERNAME%\AppData\Local\Mozilla\Firefox\Profiles
del /q /s /f "%DataDir%"
rd /s /q "%DataDir%"
for /d %%x in (C:\Users\%USERNAME%\AppData\Roaming\Mozilla\Firefox\Profiles\*) do del /q /s /f %%x\*sqlite
cls
IF %ERRORLEVEL%==0 (
    @echo "Success Message"
    timeout 10
) ELSE (
    @echo "Error Message"
    exit 1001
)

从角度来看,环境是共享域上的几个物理上独立的计算机实验室,用户通过其域帐户登录。最初的问题是部署到所有机器的图像最终在所有其他本地配置文件构建的默认配置文件中包含我们的一个 IT 用户的登录 cookie 和网络缓存数据。该映像是在圣诞假期期间部署的,因此无数用户已经在各种机器上登录(并创建了配置文件)。

给你伙计。只需循环 c:\Users 的所有目录,然后 if exist (profiledir) 继续清理。使用 conditional execution 处理成功/失败(我认为比 if %ERRORLEVEL%==0 更清晰),并使用 delayedexpansion 评估循环内的变量。如果第一个 && 的任一侧都有一个非零出口,那么 || 代码块就会触发。换句话说,如果 rddel * 失败,则会出现失败消息并且错误计数会增加。

@echo off
setlocal

set "errors=0"

for /f "delims=" %%I in ('dir /b /a:d c:\Users') do (

    set "DataDir=c:\Users\%%I\AppData\Local\Mozilla\Firefox\Profiles"
    setlocal enabledelayedexpansion

    if exist "!DataDir!" (

        rd /s /q "!DataDir!" && (

            for /d %%x in ("!DataDir:\Local\=\Roaming\!\*") do (

                del /q /s /f "%%~fx\*sqlite" && (
                    echo account %%~nI: Cleaning of Firefox profiles succeeded.
                )
            )

        ) || (
            echo account %%~nI: Cleaning of Firefox profiles FAILED.
            set /a errors += 1
        )

    )

    endlocal
)

exit /b %errors%