使用本机Win7批处理查找用户配置文件注册表项并删除它?

时间:2014-07-21 19:15:21

标签: batch-file windows-7 registry user-profile

我正在创建一个批处理,其中一部分找到与用户配置文件绑定的注册表项并删除它们。另一部分只是在C:\ Users下重命名配置文件夹,以便在用户登录时将My Docs和Desktop数据复制回新文件夹。重命名可以节省时间,而无需将整个用户配置文件复制到另一个位置 - 有时可以是30-40GB的大小。这就是我所拥有的。这意味着在以本地管理员身份登录时运行:

@echo off
MODE 75,30

:Declarations
setLocal EnableDelayedExpansion
set date=%date:~4,2%%date:~7,2%%date:~10,4%%
color 0a

echo 1. - Recreate a Windows User Profile
::Completely removes a User Profile, Logs off, then Restores Data(this will be coded later)

echo.0. - Exits

set /p input=Choose a number and press enter: 
if %input%==1 goto :1
if %input%==0 goto :0

:1
cls
@echo off
TITLE Removing Windows Profile

set /p EUID= Enter the users EUID: 

rename "C:\Users\%EUID%" "C:\Users\%EUID%.%DATE%"

cls

echo Complete. User Profile removed.

pause

shutdown -l

0:
exit

所以我需要以某种方式找到注册表项(可能在它重命名用户配置文件之后)使用提供的用户名,然后删除它们。我知道注册表项并没有完全以用户登录名命名,所以非常感谢您的帮助!谢谢大家!

2 个答案:

答案 0 :(得分:0)

我不确定如何使用批处理搜索注册表项(可能reg query命令会有帮助),但您可以使用reg delete命令删除注册表项和文件夹

答案 1 :(得分:0)

我将here中的以下内容剔除到您需要的内容中。我使用经过大量修改的源代码用于我自己的代码。这比我认为你需要的更强大,但它应该工作。它查询计算机上每个配置文件的注册表,如果找到您列出的配置文件,则重命名配置文件并删除注册表项。我会替换你的代码中使用它进行实际重命名的行。我还会将:0 EXIT移到:1之上。大多数额外的东西都是用于处理路径和用户名中的空格。我离开了:SKIP,因此您知道它正在跳过个人资料,您只需将GOTO :SKIP替换为GOTO :EOF

FOR /f "tokens=*" %%a IN ('reg query "hklm\software\microsoft\windows nt\currentversion\profilelist"^|find /i "s-1-5-21"') DO CALL :REGCHECK "%%a"
GOTO END

:REGCHECK
set SPACECHECK=
FOR /f "tokens=3,4" %%b in ('reg query %1 /v ProfileImagePath') DO SET USERREGPATH=%%b %%c
FOR /f "tokens=2" %%d in ('echo %USERREGPATH%') DO SET SPACECHECK=%%d
IF ["%SPACECHECK%"]==[""] GOTO REGCHECK2
GOTO USERCHECK

:REGCHECK2
FOR /f "tokens=3" %%g in ('reg query %1 /v ProfileImagePath') DO SET USERREGPATH=%%g
GOTO USERCHECK

:USERCHECK
FOR /f "tokens=3 delims=\" %%e in ('echo %USERREGPATH%') DO SET USERREG=%%e
FOR /f "tokens=1 delims=." %%f IN ('echo %USERREG%') DO SET USERREGPARSE=%%f
ECHO %EUID%|find /I "%USERREGPARSE%" > NUL
IF ERRORLEVEL=0 GOTO CLEAN
IF ERRORLEVEL=1 GOTO SKIP

:SKIP
GOTO :EOF

:CLEAN
rename "C:\Users\%EUID%" "C:\Users\%EUID%.%DATE%"
reg delete %1 /f
GOTO :END

:END
Pause

:EOF

因此,我所做的更改将如下所示。

@echo off
MODE 75,30

:Declarations
setLocal EnableDelayedExpansion
set date=%date:~4,2%%date:~7,2%%date:~10,4%%
color 0a

echo 1. - Recreate a Windows User Profile
::Completely removes a User Profile, Logs off, then Restores Data(this will be coded later)

echo.0. - Exits

set /p input=Choose a number and press enter: 
if %input%==1 goto :1
if %input%==0 goto :0

:0
exit

:1
cls
@echo off
TITLE Removing Windows Profile

set /p EUID= Enter the users EUID: 

FOR /f "tokens=*" %%a IN ('reg query "hklm\software\microsoft\windows nt\currentversion\profilelist"^|find /i "s-1-5-21"') DO CALL :REGCHECK "%%a"
GOTO END

:REGCHECK
set SPACECHECK=
FOR /f "tokens=3,4" %%b in ('reg query %1 /v ProfileImagePath') DO SET USERREGPATH=%%b %%c
FOR /f "tokens=2" %%d in ('echo %USERREGPATH%') DO SET SPACECHECK=%%d
IF ["%SPACECHECK%"]==[""] GOTO REGCHECK2
GOTO USERCHECK

:REGCHECK2
FOR /f "tokens=3" %%g in ('reg query %1 /v ProfileImagePath') DO SET USERREGPATH=%%g
GOTO USERCHECK

:USERCHECK
FOR /f "tokens=3 delims=\" %%e in ('echo %USERREGPATH%') DO SET USERREG=%%e
FOR /f "tokens=1 delims=." %%f IN ('echo %USERREG%') DO SET USERREGPARSE=%%f
ECHO %EUID%|find /I "%USERREGPARSE%" > NUL
IF ERRORLEVEL=0 GOTO CLEAN
IF ERRORLEVEL=1 GOTO SKIP

:SKIP
GOTO :EOF

:CLEAN
rename "C:\Users\%EUID%" "C:\Users\%EUID%.%DATE%"
reg delete %1 /f
GOTO :END

:END
cls

echo Complete. User Profile removed.

pause

shutdown -l

:EOF

您是唯一使用此脚本的人吗?如果是这样我应该工作正常,如果没有,你真的想要清理用户输入部分,并可能使用基本的vbs消息框,使它们更耐用。

相关问题