【问题标题】:Using native Win 7 batch methods to remotely recreate a users profile?使用本机 Win 7 批处理方法远程重新创建用户配置文件?
【发布时间】:2014-08-19 03:07:25
【问题描述】:

我为 XP 制作了一个简单的批处理,我们的团队用它来在公司环境中重新创建 XP 配置文件,但我们已经迁移到 Win 7。显然,在 7 中重新创建用户配置文件比简单地重命名旧配置文件要复杂一些,在所有用户启动文件夹中放置一个还原批处理,然后让 Windows 在登录时创建一个新的配置文件。对我来说,在 if/then/else 语句上编写批处理往往有点过于复杂,所以我希望像旧的一样保持简单。有人建议我将一个小型命令行友好的用户配置文件删除实用程序合并到批处理中,但我还没有找到任何首先提供备份的实用程序。这意味着我必须先 Robocopy 整个用户配置文件,然后在登录时恢复所有数据。我“希望”避免这种时间投资。这也让我有点紧张,因为在复制过程中没有错误,然后在下一步被全部删除。这就是为什么我真的很喜欢在 XP 中重命名用户配置文件以应对最坏的情况。任何人都可以向我指出一个简单的实用程序的方向,或者可以将一些快速简单的代码放在一起我可以使用吗?我的大部分 XP 批处理只是使用 c$ 访问,像

这样的简单命令
rename "\\%ip%\c$\Documents and Settings\%USERNAME%" %USERNAME%.%date%

非常感谢您的所有帮助!

【问题讨论】:

  • 与用户资料混淆是危险的。您实际上想在这里实现什么目标?
  • 这是我们在这里遇到的许多问题的一揽子解决方案。我可以毫无问题地手动执行此操作,并且它解决了许多问题。我只想使用批处理自动化它?
  • 我希望大多数配置文件删除工具不会关心配置文件文件夹是否存在,因此您应该能够将文件夹移动到安全的地方,然后删除配置文件。首先在非生产机器上进行彻底测试。
  • Harry,这些是我要问的其他想法。我想我会试一试并插入类似 delprof.exe 实用程序的东西。
  • 您可能需要在 regedit 上删除用户 sid 键,以防止临时登录。首先像 xp 一样重命名,然后删除用户的 sid 键。我认为路径是 hklm/ms/soft/winNT/currentversion/profilelist/$userSID

标签: batch-file windows-7 remote-access user-profile recreate


【解决方案1】:

我实际上只是经历了同样的事情!好的,所以我放在一起的以下“代码”是批量的,因为它既简单又轻巧。它不漂亮,但它完成了工作。

它的步骤:

  1. 连接到机器和用户配置文件。如果机器离线,它会告诉你。如果提供的用户名与配置文件不匹配,它将返回计算机上的配置文件列表,以便您可以将呼叫者与正确的配置文件匹配。
  2. 将 EFS 证书备份到桌面。
  3. 网络驱动器和打印机备份到用户桌面上的文本文件。
  4. 用户自动注销
  5. 将“old_”附加到本地配置文件名称的开头,并将重建的日期和时间附加到末尾。
  6. 配置文件注册表项的备份导出了旧配置文件的“联系人”文件夹,然后将其从配置单元中删除。
  7. 将“配置文件迁移工具”复制到用户桌面。这会将所有数据从旧配置文件移动到重建的配置文件。它还复制在 Fix Pack 中找到的“映射所有 PST 文件.vbs”文件。迁移所有数据后自动启动“Map all PST files.vbs”文件
  8. 完成所有步骤后,Outlook 将启动

第 1 步:您需要备份他们的数据,就是这样。另存为 Backup.bat

@title Profile Data Backup Tool v1.53
@echo off
echo.
echo.

if exist %USERPROFILE%\desktop\EFSCertBackup.cer del %USERPROFILE%\desktop\EFSCertBackup.cer
>goto :deletePFXFile

:deletePFXFile
if exist %USERPROFILE%\desktop\EFSCertBackup.pfx del %USERPROFILE%\desktop\EFSCertBackup.pfx
goto :backupefscerts

echo.
:backupefscerts
REM back up EFS Certs
echo This is a password you will create. If you do not want to create a password, press 'Enter' twice.
echo.
    cipher /r:%USERPROFILE%\desktop\EFSCertBackup

REM back up network drives
    net use > %USERPROFILE%\Desktop\NetworkDrivesandPrinters.txt
REM back up network printers
    Cscript %WINDIR%\System32\Printing_Admin_Scripts\en-US\Prnmngr.vbs -l >> %USERPROFILE%\Desktop\NetworkDrivesandPrinters.txt

REM backup the registry key
set THEME_REGKEY="HKLM\SOFTWARE\Wow6432Node\Network Associates\ePolicy Orchestrator\Agent"
set THEME_REGVAL=LoggedOnUser

REM Check for presence of key first.
reg query %THEME_REGKEY% /v %THEME_REGVAL% || (echo No theme name present! & pause & exit /b 1)

REM query the value. pipe it through findstr in order to find the matching line that has the value. only grab token 3 and the remainder of the line. %%b is what we are interested in here.
set THEME_NAME=
for /f "tokens=2,*" %%a in ('reg query %THEME_REGKEY% /v %THEME_REGVAL% ^| findstr %THEME_REGVAL%') do (
    set THEME_NAME=%%b
) 

REM replace any spaces with +
set THEME_NAME=%THEME_NAME: =+%

echo.
echo Please wait. This window will close automatically once the tool is done running.
echo Please inform the agent once this window closes.
wmic useraccount where (name='%THEME_NAME%') get sid >SID.txt
powershell -Command "(gc SID.txt) -replace 'SID', '' | Out-File SID.txt"
powershell -Command "(gc SID.txt) -replace ' ', '' | Out-File SID.txt"
powershell -Command "(gc SID.txt) | ? {$_.trim() -ne '' } | set-content SID.txt"
for /f "delims=" %%x in (SID.txt) do set SID=%%x
reg export "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%SID%" "%Userprofile%\contacts\oldprofileBackupKey.reg"
shutdown.exe /l /f
(goto) 2>nul & del "%~f0"

2。这将映射用户拥有的所有 PST 文件。将其另存为“映射所有 PST Files.vbs”

    On error resume next

    Dim objFSO
    Dim objWSH
    Dim objWMIService
    Dim colProcess
    Dim objProcess
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objWSH = CreateObject("Wscript.Shell")
    Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
    Dim strUserProfile
    Dim OutlookOpen
    strUserProfile = objWSH.ExpandEnvironmentStrings("%USERPROFILE%")

    objWSH.Run "%COMSPEC% /c DIR " & CHR(34) & strUserProfile & "\*.pst" & CHR(34) & " /b /s>" & CHR(34) & strUserProfile & "\My Documents\PST Locations.txt""", 0, True
    objWSH.Run "%COMSPEC% /c DIR H:\*.pst /b /s>>" & CHR(34) & strUserProfile & "\My Documents\PST Locations.txt""", 0, True

    If Not objFSO.FileExists(strUserProfile & "\My Documents\PST Locations.txt") Then
        Done()
    End If

    Dim AppOutlook, OutlookNS, Path, objfile, Line

    Set colProcess = objWMIService.ExecQuery ("Select * from Win32_Process")
    For Each objProcess In colProcess
        If objProcess.Name = "OUTLOOK.EXE" Then OutlookOpen = True
    Next


    Set AppOutlook = CreateObject("Outlook.Application")
    If err.number <> 0 Then
        Set AppOutlook = GetObject(,"Outlook.Application")
    End If

    Set OutlookNS = AppOutlook.GetNameSpace("MAPI")

    Set objfile = objFSO.opentextfile(strUserProfile & "\My Documents\PST Locations.txt")
    Do Until objfile.AtEndOfStream
    Line=objfile.readline
    If instr(Line, "No PST mappings found") Then
        Done()
    Else
        OutlookNS.AddStore Line
    End If
    Loop

    If Not OutlookOpen Then
        AppOutlook.Session.Logoff
        AppOutlook.Quit
    End If
    objfile.close
    Set objfile = Nothing
    Set AppOutlook = Nothing
    Set OutlookNS = Nothing

    Done()

    Sub Done()
        MSGBOX "Remapping of PST(s) is complete.  Please ensure that your PST(s) have been remapped succesfully."
        If Not OutlookOpen Then objWSH.Run "%COMSPEC% /c Start Outlook",0,False
        objFSO.DeleteFile(strUserProfile & "\Desktop\Map All PST Files.vbs")
        Wscript.Quit
    End Sub

3。这是将他们的所有数据从旧配置文件移动到新配置文件的部分。保存为“Profile Migration Tool.bat”

@echo off
set THEME_REGKEY="HKLM\SOFTWARE\Wow6432Node\Network Associates\ePolicy Orchestrator\Agent"
set THEME_REGVAL=LoggedOnUser
cls
REM Check for presence of key first.
reg query %THEME_REGKEY% /v %THEME_REGVAL% || (echo No theme name present! & pause & exit /b 1)
cls
REM query the value. pipe it through findstr in order to find the matching line that has the value. only grab token 3 and the remainder of the line. %%b is what we are interested in here.
set THEME_NAME=
for /f "tokens=2,*" %%a in ('reg query %THEME_REGKEY% /v %THEME_REGVAL% ^| findstr %THEME_REGVAL%') do (
    set THEME_NAME=%%b
)
cls
set /p content=<oldprofile.txt
robocopy "%content%\Contacts" "C:\Users\%THEME_NAME%\Contacts" /MIR /E /E /COPY:DAT /IS /XA:SHT /XF *.ini /R:2 /W:5
robocopy "%content%\Downloads" "C:\Users\%THEME_NAME%\Downloads" /MIR /E /COPY:DAT /XA:SHT /XF *.ini /R:2 /W:5
robocopy "%content%\Documents" "C:\Users\%THEME_NAME%\Documents" /MIR /E /COPY:DAT /IS /XA:SHT /XD "My Music" /XD "My Pictures" /XD "My Videos" /XF *.ini /R:2 /W:5
robocopy "%content%\Desktop" "C:\Users\%THEME_NAME%\Desktop" /MIR /E /COPY:DAT /IS /XA:SHT /XF *.ini /R:2 /W:5
robocopy "%content%\Favorites" "C:\Users\%THEME_NAME%\Favorites" /MIR /E /COPY:DAT /IS /XA:SHT /XF *.ini /R:2 /W:5
robocopy "%content%\Links" "C:\Users\%THEME_NAME%\Links" /MIR /E /COPY:DAT /IS /XA:SHT /XF *.ini /R:2 /W:5
robocopy "%content%\Music" "C:\Users\%THEME_NAME%\Music" /MIR /E /COPY:DAT /IS /XA:SHT /XF *.ini /R:2 /W:5
robocopy "%content%\Pictures" "C:\Users\%THEME_NAME%\Pictures" /MIR /E /COPY:DAT /IS /XA:SHT /XF *.ini /R:2 /W:5
robocopy "%content%\Videos" "C:\Users\%THEME_NAME%\Videos" /MIR /E /COPY:DAT /IS /XA:SHT /XF *.ini /R:2 /W:5
robocopy "%content%" "C:\Users\%THEME_NAME%\Documents" /COPY:DAT /IS /XD /XF ntuser.* /XF *.ini /R:2 /W:5
killtask /im outlook.exe
cd %currentuser%\Desktop
wscript "MAP ALL PST Files.vbs" //e:vbscript
del oldprofile.txt
del "%~f0"&exit

4。这是圣杯。实际重建配置文件的部分。它必须以管理员身份运行。将其另存为 RAP.bat:

    @title Rebuild a Profile Tool Version 3.0
    @echo off
    :beginning
    set THEME_REGKEY="HKLM\SOFTWARE\Wow6432Node\Network Associates\ePolicy Orchestrator\Agent"
    set THEME_REGVAL=LoggedOnUser

    REM Check for presence of key first.
    reg query %THEME_REGKEY% /v %THEME_REGVAL% || (echo No theme name present! & pause>nul & exit /b 1)

    REM query the value. pipe it through findstr in order to find the matching line that has the value. only grab token 3 and the remainder of the line. %%b is what we are interested in here.
    set THEME_NAME=
    for /f "tokens=2,*" %%a in ('reg query %THEME_REGKEY% /v %THEME_REGVAL% ^| findstr %THEME_REGVAL%') do (
        set THEME_NAME=%%b
    )

    set RAPPath="\\127.0.0.1\C$\Program Files\HDUTILS\RAP"
    cls

    :connectIn
        set /p remotepc= Enter the remote computer name or IP address: 
    if exist \\%remotepc%\C$\Users\ goto :inputUsername
    echo Instruct user to restart the machine and log in.
    SET tmout=3
    PING 1.2.1.2 -n 1 -w %tmout%000 > NUL
    echo.
    goto :connectIn

    :inputUsername
        set /p remoteuser= Enter remote user's username: 
    if exist \\%remotepc%\C$\Users\%remoteuser%\ goto :choice
    echo Invalid username. Please verify the spelling and try again.
    SET tmout=3
    PING 1.2.1.2 -n 1 -w %tmout%000 > NUL
    dir \\%remotepc%\C$\Users\
    goto :inputUsername
    echo.


    :choice
    echo.
    FOR %%? IN (\\%remotepc%\C$\Users\%remoteuser%\NTUSER.DAT) DO (ECHO %remoteUser%'s %%~n?%%~x? file size is %%~z? bytes)
    echo Profile corruption typically occurs around 5000000 bytes. 
    echo.
    REM This user's NTUSER.DAT file is over by ___ bytes.
    set /P continue=Do you want to continue rebuilding this profile?[Y/N] 
    if /I "%continue%" EQU "Y" goto :sendBackup
    if /I "%continue%" EQU "y" goto :sendBackup
    if /I "%continue%" EQU "N" goto :abandon
    if /I "%continue%" EQU "n" goto :abandon
    echo.
    echo Error: Invalid Parameter. Please press either "y" or "n" to continue.
    echo.
    goto :choice

    :abandon
    cls
    echo Standby. Restarting program...
    SET tmout=3
    PING 1.2.1.2 -n 1 -w %tmout%000 > NUL
    goto :beginning


    REM Copy over the EFS Cert backup file

    :sendBackup
    set remoteuserdesktop=\\%remotepc%\C$\Users\%remoteuser%\Desktop
        robocopy %RAPPath%\ %remoteuserdesktop%\ Backup.bat
    echo.
    echo.
    echo.
    echo Instruct the user to run the file named Backup.bat on their desktop and 
    echo let you know when it finishes. When it is done running, the command window 
    echo will close and 3 files should have appeared on the Desktop. Tell them to
    echo inform you when they see the Ctrl + Alt + Del screen. 
    echo.
    echo.
    echo.

    :SIDexist
    if exist \\%remotepc%\c$\users\%remoteuser%\Desktop\SID.txt goto :copySID
    goto :SIDexist

    :copySID
    robocopy %remoteuserdesktop%\ %RAPPath%\ SID.txt

    del %remoteuserdesktop%\SID.txt
    echo Press any key to rename the profile...
    echo.
    echo.
    pause>nul


    :rename
     Set CURRDATE=%TEMP%\CURRDATE.TMP

     Set CURRTIME=%TEMP%\CURRTIME.TMP 
    DATE /T > %CURRDATE%
     TIME /T > %CURRTIME%

    Set PARSEARG="eol=; tokens=1,2,3,4* delims=/, "
     For /F %PARSEARG% %%i in (%CURRDATE%) Do SET YYYYMMDD=%%l%%k%%j

    Set PARSEARG="eol=; tokens=1,2,3* delims=:, "
     For /F %PARSEARG% %%i in (%CURRTIME%) Do Set HHMM=%%i%%j%%k

    Echo RENAME \\%remotepc%\C$\Users\%remoteuser% old_%remoteuser%_%YYYYMMDD%%HHMM%
    RENAME \\%remotepc%\C$\Users\%remoteuser% old_%remoteuser%_%YYYYMMDD%%HHMM%
    set oldusername=old_%remoteuser%_%YYYYMMDD%%HHMM%
    echo old_%remoteuser%_%YYYYMMDD%%HHMM% >oldprofile.txt
    powershell -Command "(gc oldprofile.txt) -replace ' ', '' | Out-File oldprofile.txt"
    powershell -Command "(gc oldprofile.txt) | ? {$_.trim() -ne '' } | set-content oldprofile.txt"


    :choice2
    if exist \\%remotepc%\C$\Users\old_%remoteuser%_%YYYYMMDD%%HHMM% goto :regKeyDelete
    goto :uhoh

    :uhoh
    echo Inform the user you will restart their computer momentarily. Tell them to let 
    echo you know when they see the 'Ctrl + Alt + Del'screen. 
    echo Verify network connectivity with the ping that is now running.
    shutdown /r /m \\%remotepc% /c "Computer will not rename profile. When prompted for a green shutdown, press no. Press OK to continue." /d p:0:0
    start cmd.exe @cmd /k "ping -t %remotepc%"
    echo.
    echo Wait 60 seconds after the machine comes back online, then press any key to 
    echo continue the rebuild...
    pause>nul
    goto :rename2

    :rename2
     Set CURRDATE=%TEMP%\CURRDATE.TMP

     Set CURRTIME=%TEMP%\CURRTIME.TMP 
    DATE /T > %CURRDATE%
     TIME /T > %CURRTIME%

    Set PARSEARG="eol=; tokens=1,2,3,4* delims=/, "
     For /F %PARSEARG% %%i in (%CURRDATE%) Do SET YYYYMMDD=%%l%%k%%j

    Set PARSEARG="eol=; tokens=1,2,3* delims=:, "
     For /F %PARSEARG% %%i in (%CURRTIME%) Do Set HHMM=%%i%%j%%k

    Echo RENAME \\%remotepc%\C$\Users\%remoteuser% old_%remoteuser%_%YYYYMMDD%%HHMM%
    RENAME \\%remotepc%\C$\Users\%remoteuser% old_%remoteuser%_%YYYYMMDD%%HHMM%
    set oldusername=old_%remoteuser%_%YYYYMMDD%%HHMM%
    echo old_%remoteuser%_%YYYYMMDD%%HHMM% >oldprofile.txt
    powershell -Command "(gc oldprofile.txt) -replace ' ', '' | Out-File oldprofile.txt"
    powershell -Command "(gc oldprofile.txt) | ? {$_.trim() -ne '' } | set-content oldprofile.txt"
    goto :choice3

    :choice3
    echo.
    if exist \\%remotepc%\C$\Users\old_%remoteuser%_%YYYYMMDD%%HHMM% goto :regKeyDelete
    goto :rename2

    :regKeyDelete
    REM Delete registry key
    cd "C:\Program Files\HDUTILS\RAP\"
        set /p Build=<SID.txt
        reg delete "\\%remotepc%\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%Build%"
    echo \\%remotepc%\C$\Users\old_%remoteuser%_%YYYYMMDD%%HHMM% >oldprofile.txt
    echo.
    echo. 
    echo Instruct the User to log in.
    SET tmout=3
    PING 1.2.1.2 -n 1 -w %tmout%000 > NUL
    echo Waiting on customer login...
    echo.

    :listrebuilt
    if exist \\%remotepc%\C$\Users\%remoteuser%\Desktop goto :nextplease
    goto :listrebuilt

    :nextplease
    set remoteuserdesktop=\\%remotepc%\C$\Users\%remoteuser%
    powershell -Command "(gc oldprofile.txt) -replace ' ', '' | Out-File oldprofile.txt"
    powershell -Command "(gc oldprofile.txt) | ? {$_.trim() -ne '' } | set-content oldprofile.txt"

    :copymigrationTools
    robocopy %RAPPath%\ %remoteuserdesktop%\ oldprofile.txt
    robocopy %RAPPath%\ %remoteuserdesktop%\ "Profile Migration Tool.bat"
    robocopy %RAPPath%\ %remoteuserdesktop%\ "Map All PST files.vbs"

    :checkFiles
    if exist %remoteuserdesktop%\oldprofile.txt goto :checkPMT
    goto :recopyProfile

    :checkPMT
    if exist "%remoteuserdesktop%\Profile Migration Tool.bat" goto :checkPST
    goto :recopyPMT

    :checkPST
    if exist "%remoteuserdesktop%\Map All PST files.vbs" goto :finish
    goto :recopyPST



    :recopyProfile
    robocopy %RAPPath%\ %remoteuserdesktop%\ oldprofile.txt
    goto :checkFiles

    :recopyPMT
    robocopy %RAPPath%\ %remoteuserdesktop%\ "Profile Migration Tool.bat"
    goto :checkFiles

    :recopyPST
    robocopy %RAPPath%\ %remoteuserdesktop%\ "Map All PST files.vbs"
    goto :checkFiles


    :finish
    echo.
    echo You have completed your end of the rebuild. MSRA in (to monitor everything)
    echo and run 'Profile Migration Tool.bat' file to begin the migration process.
    echo While everything is migrating, verify the user knows how to map network drives 
    echo and printers.
    echo restart in 20 seconds.
    (
    echo Profile Rebuilt 
    echo Backup up EFS Certificates to desktop. 
    echo Network drives and printers backed up to a text file on user's desktop. 
    echo Appended 'old_' to the beginning of the local profile name and the date and time of rebuild to the end. 
    echo Backup of the profile registry key exported the old profile's 'Contacts' folder. 
    echo Agent instructed the user to log in. 
    echo Copied the Profile Migration Tool to the user's Desktop. 
    echo Data copied from old profile, EFS certificates restored        ) | clip
    echo.
    echo A copy of all steps taken have been sent to the clipboard. Please paste these into your ticket.
    SET tmout=10
    PING 1.2.1.2 -n 1 -w %tmout%000 > NUL
    goto :beginning

【讨论】:

    【解决方案2】:

    我们在 Win 7 环境中使用它,不必以提升的权限运行,并且可以远程完成。关键是 PC 已重新启动,并且用户要在此脚本运行后才能登录。用户登录并在远程 PC 上完成脚本后。您必须重新映射任何网络打印机并在 Outlook 中附加任何 PST 文件。


    @echo off
    cls
    title Profile Rebuilder (Local/Remote)
    echo.
    echo.
    echo This batch file will rebuild a user's Windows 7 profile.
    echo It is intended to help speed the process of rebuilding
    echo a corrupted user profile either locally (while logged in
    echo as DFASADMIN), or remotely.  Either way the user who's 
    echo profile is being rebuilt can't be logged in and the PC 
    echo must have been rebooted.
    echo.
    echo.
    set /p cont=Do you wish to continue with the profile rebuild (y/n): 
    if /i "%cont%"=="n" goto end
    
    :local
    echo.
    set /p local=Is this script being run from a remote PC (y/n): 
    
    :rebooted
    echo.
    set /p reb=Has the PC been rebooted (y/n): 
    if /i "%reb%"=="y" goto renameremote
    if /i "%local%"=="y" goto warn2
    
    :warn1
    cls
    color c0
    echo.
    echo This script can not continue until the PC has been rebooted!
    echo Please reboot now and then re-run this batch file.
    echo.
    pause
    exit
    
    :warn2
    cls
    color c0
    echo.
    echo This script can not continue until the PC has been rebooted!
    echo Please have the user reboot now.  Ensure they do not login.
    echo.
    pause
    color 0f
    goto rebooted
    
    :renameremote
    if /i "%local%"=="n" goto renamelocal
    cls
    echo.
    echo.
    set /p comp=Please enter the Computer Name or IP address of the remote PC: 
    echo.
    echo Available Profiles:
    dir /b "\\%comp%\c$\Users" | Find /v /i "users" | Find /v /i "default" | Find /v /i "dfasadmin" | Find /v /i "Public" | Find /v /i "runapps" | Find /v /i "mrbaInstall" | Find /v /i "test"
    If Not %ErrorLevel%==0 goto Error
    goto vername
    
    :Error
    cls
    color c0
    echo.
    echo %comp% could not be contacted.
    echo Please verify network connectivity and try again.
    echo.
    echo.
    pause
    exit
    
    :vername
    echo.
    set /p name=Enter the profile name (i.e. firstname_lastname): 
    if /i not exist "\\%comp%\c$\Users\%name%" goto vername
    if exist "\\%comp%\c$\Users\%name%.bak2" move "\\%comp%\c$\Users\%name%.bak2" "\\%comp%\c$\Users\%name%.bak3"
    if exist "\\%comp%\c$\Users\%name%.bak" move "\\%comp%\c$\Users\%name%.bak" "\\%comp%\c$\Users\%name%.bak2"
    move "\\%comp%\c$\Users\%name%" "\\%comp%\c$\Users\%name%.bak"
    if /i not exist "\\%comp%\c$\Users\%name%.bak" goto failed
    set drv=\\%comp%\c$
    goto restore
    
    :renamelocal
    cls
    echo.
    echo Available Profiles:
    dir /b "C:\Users" | Find /v /i "user" | Find /v /i "default" | Find /v /i "dfasadmin" | Find /v /i "helpdesk" | Find /v /i "runapps" | Find /v /i "mrbaInstall" | Find /v /i "test"
    :vername2
    echo.
    set /p name=Enter the profile name (i.e. firstname_lastname): 
    if /i not exist "C:\Users\%name%" goto vername2
    if exist "C:\Users\%name%.bak2" move "C:\Users\%name%.bak2" "C:\Users\%name%.bak3"
    if exist "C:\Users\%name%.bak" move "C:\Users\%name%.bak" "C:\Users\%name%.bak2"
    move "C:\Users\%name%" "C:\Users\%name%.bak"
    if /i not exist "C:\Users\%name%.bak" goto failed
    set drv=C:
    
    :restore
    echo @echo off >"%drv%\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\rebuild.bat"
    echo cls >>"%drv%\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\rebuild.bat"
    echo title Restoring Profile Data >>"%drv%\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\rebuild.bat"
    echo echo. >>"%drv%\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\rebuild.bat"
    echo echo **************************************************** >>"%drv%\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\rebuild.bat"
    echo echo. >>"%drv%\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\rebuild.bat"
    echo echo DO NOT CLOSE THIS WINDOW UNLESS INSTRUCTED TO DO SO. >>"%drv%\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\rebuild.bat"
    echo echo. >>"%drv%\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\rebuild.bat"
    echo echo **************************************************** >>"%drv%\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\rebuild.bat"
    echo echo. >>"%drv%\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\rebuild.bat"
    echo echo. >>"%drv%\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\rebuild.bat"
    echo echo Restoring The User's Desktop... >>"%drv%\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\rebuild.bat"
    echo xcopy "C:\Users\%name%.bak\Desktop" "C:\Users\%name%\Desktop" /c /g /h /i /k /q /s /y /exclude:C:\rbexclude.txt >>"%drv%\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\rebuild.bat"
    echo echo Restoring The User's Favorites... >>"%drv%\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\rebuild.bat"
    echo xcopy "C:\Users\%name%.bak\Favorites" "C:\Users\%name%\Favorites" /c /g /h /i /k /q /s /y /exclude:C:\rbexclude.txt >>"%drv%\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\rebuild.bat"
    echo echo Restoring The User's Documents... >>"%drv%\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\rebuild.bat"
    echo xcopy "C:\Users\%name%.bak\Documents" "C:\Users\%name%\Documents" /c /g /h /i /k /q /s /y /exclude:C:\rbexclude.txt >>"%drv%\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\rebuild.bat"
    echo xcopy "C:\Users\%name%.bak\My Documents" "C:\Users\%name%\My Documents" /c /g /h /i /k /q /s /y /exclude:C:\rbexclude.txt >>"%drv%\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\rebuild.bat"
    echo echo Restoring The User's Pictures... >>"%drv%\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\rebuild.bat"
    echo xcopy "C:\Users\%name%.bak\Pictures" "C:\Users\%name%\Pictures" /c /g /h /i /k /q /s /y /exclude:C:\rbexclude.txt >>"%drv%\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\rebuild.bat"
    echo xcopy "C:\Users\%name%.bak\My Pictures" "C:\Users\%name%\My Pictures" /c /g /h /i /k /q /s /y /exclude:C:\rbexclude.txt >>"%drv%\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\rebuild.bat"
    echo echo Restoring The User's PST files... >>"%drv%\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\rebuild.bat"
    echo if not exist "C:\Users\%name%\Documents\Outlook Files" mkdir "C:\Users\%name%\Documents\Outlook Files"
    echo if not exist "C:\Users\%name%\My Documents\Outlook Files" mkdir "C:\Users\%name%\My Documents\Outlook Files"
    echo xcopy "C:\Users\%name%.bak\AppData\Local\Microsoft\Outlook\*.pst" "C:\Users\%name%\Documents\Outlook Files" /c /g /h /i /k /q /s /y /exclude:C:\rbexclude.txt >>"%drv%\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\rebuild.bat"
    echo xcopy "C:\Users\%name%.bak\AppData\Local\Microsoft\Outlook\*.pst" "C:\Users\%name%\My Documents\Outlook Files" /c /g /h /i /k /q /s /y /exclude:C:\rbexclude.txt >>"%drv%\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\rebuild.bat"
    echo echo Restoring The User's Roaming Settings... >>"%drv%\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\rebuild.bat"
    echo xcopy "C:\Users\%name%.bak\AppData\Roaming\Microsoft\Signatures" "C:\Users\%name%\AppData\Microsoft\Signatures" /c /g /h /i /k /q /s /y /exclude:C:\rbexclude.txt >>"%drv%\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\rebuild.bat"
    echo xcopy "C:\Users\%name%.bak\AppData\Roaming\Microsoft\Proof" "C:\Users\%name%\AppData\Microsoft\Proof" /c /g /h /i /k /q /s /y /exclude:C:\rbexclude.txt >>"%drv%\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\rebuild.bat"
    echo if exist "C:\Users\%name%.bak\WinGamps32.ini" xcopy "C:\Users\%name%.bak\WinGamps32.ini" "C:\Users\%name%" /c /g /h /i /k /q /s /y >>"%drv%\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\rebuild.bat"
    echo xcopy "C:\Users\%name%.bak\AppData\Roaming\Microsoft\Windows\Themes" "C:\Users\%name%\AppData\Roaming\Microsoft\Windows\Themes" /c /g /h /i /k /q /s /y /exclude:C:\rbexclude.txt >>"%drv%\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\rebuild.bat"
    echo echo Restoring The User's Local Settings... >>"%drv%\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\rebuild.bat"
    echo xcopy "C:\Users\%name%.bak\AppData\Local\Microsoft\Windows\Themes" "C:\Users\%name%\AppData\Local\Microsoft\Windows\Themes" /c /g /h /i /k /q /s /y /exclude:C:\rbexclude.txt >>"%drv%\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\rebuild.bat"
    echo echo Restoring Printers
    echo regedit /ADD \\%comp%\c$\Temp\Printers.reg
    echo echo.
    echo cd /d "C:\Users\%name%" >>"%drv%\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\rebuild.bat"
    echo cls >>"%drv%\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\rebuild.bat"
    echo echo. >>"%drv%\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\rebuild.bat"
    echo echo. >>"%drv%\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\rebuild.bat"
    echo echo The profile data has been restored.  You still need to: >>"%drv%\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\rebuild.bat"
    echo echo      1) Re-map printers. >>"%drv%\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\rebuild.bat"
    echo echo      2) Setup Outlook. >>"%drv%\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\rebuild.bat"
    echo echo      3) Login MS Communicator. >>"%drv%\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\rebuild.bat"
    echo echo      4) Manually delete C:\ProgramData\Microsoft\Windows\Start Menu >>"%drv%\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\rebuild.bat""
    echo echo         Start Menu\Programs\Startup\rebuild.bat (if present). >>"%drv%\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\rebuild.bat"
    echo echo      5) Delete C:\Users\%name%.bak >>"%drv%\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\rebuild.bat"
    echo echo         when profile has been verified! >>"%drv%\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\rebuild.bat"
    echo echo. >>"%drv%\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\rebuild.bat"
    echo pause >>"%drv%\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\rebuild.bat"
    echo attrib -h -r -s C:\rbexclude.txt >>"%drv%\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\rebuild.bat"
    echo del /q C:\rbexclude.txt >>"%drv%\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\rebuild.bat"
    echo attrib -h -r -s "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\rebuild.bat" >>"%drv%\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\rebuild.bat"
    echo del /s /q "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\rebuild.bat" >>"%drv%\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\rebuild.bat"
    echo .tmp >"%drv%\rbexclude.txt"
    echo .err >>"%drv%\rbexclude.txt"
    echo .ost >>"%drv%\rbexclude.txt"
    echo .oab >>"%drv%\rbexclude.txt"
    echo .mp3 >>"%drv%\rbexclude.txt"
    echo .mp4 >>"%drv%\rbexclude.txt"
    echo .wma >>"%drv%\rbexclude.txt"
    echo extend.dat >>"%drv%\rbexclude.txt"
    echo extend.dat _ActiveCACBAK >>"%drv%\rbexclude.txt"
    goto regedit
    
    :failed
    cls
    color c0
    echo.
    echo ********************** ERROR ***********************
    echo.
    echo The %name% profile could not be backed up.
    echo Unable to rebuild this profile.
    echo This script will now exit.
    echo.
    echo ****************************************************
    echo.
    echo.
    pause
    exit
    
    :regedit
    cls
    :regedit /EXPORT \\%comp%\c$\Temp\Printers.reg "HKEY_CURRENT_USER\Printers"
    COLOR 4F
    echo.
    echo *************** WARNING WARNING WARNING WARNING WARNING ***********************   
    echo.
    echo Before continuing, You must now delete the profile registry and related
    echo GUID keys. Run REGEDIT as administrator!
    echo.
    echo HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
    echo.
    echo and
    echo.
    echo HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileGuid
    echo.
    echo NOTE: There is not GUID for 64 Bit Windows.
    echo.
    echo *************** WARNING WARNING WARNING WARNING WARNING ***********************   
    echo.
    pause
    COLOR 07
    goto complete
    
    :complete
    cls
    echo.
    echo.
    echo Profile rebuild is now ready to run!
    echo.
    echo Please have the user login now.  You will still need to:
    echo      1) Manually re-map printers.
    echo      2) Manually setup Outlook.
    echo      3) Manually login MS Communicator if not signed in already.
    echo      4) Manually delete C:\ProgramData\Microsoft\Windows\
    echo         Start Menu\Programs\Startup\rebuild.bat (if present).
    echo      7) Manually delete C:\Users\%name%.bak
    echo         when profile has been verified.
    echo.
    pause
    
    :end

    【讨论】:

      【解决方案3】:

      Win 7 中路径已更改。现在为 c:\users。

      if exist c:\user rename "\\%ip%\c$\Users\%USERNAME%" "%USERNAME%.%newdate%"
      if exist "c:\Documents and settings" rename "\\%ip%\c$\Documents and Settings\%USERNAME%" "%USERNAME%.%newdate%"
      

      %date% 也会包含非法字符。

      Set newdate=%date:\=%
      

      将不带分隔符的数字放入 newdate。

      【讨论】:

        猜你喜欢
        • 2014-08-18
        • 1970-01-01
        • 2013-01-08
        • 2013-02-13
        • 2012-11-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-21
        相关资源
        最近更新 更多