【问题标题】:Robocopy script to transfer user data from old PC to new PCRobocopy 脚本将用户数据从旧 PC 传输到新 PC
【发布时间】:2017-01-09 17:31:56
【问题描述】:

我正在尝试编写一个脚本,可用于将数据从最终用户的计算机远程传输到我正在为他们准备的新计算机。我需要从多个用户配置文件传输数据,所以我已经编写了它以循环浏览旧机器上的用户配置文件,但我不确定几个地方的正确语法,特别是我需要引用当前用户的变量文件夹作为脚本循环遍历它们(请参阅下面列出的目录中的问号)。

我写它只是为了复制过去 90 天内使用过的用户配置文件。无论年龄大小,我都想复制一些配置文件,例如 Public、Default 等,但我可能会再添加一些 Robocopy 行来完成此操作。

谁能告诉我下面问号出现的语法需要什么?这将是 $_ 在 Powershell 中,但我不确定它在 CMD 批处理文件中是什么。

提前致谢,

安德鲁

@echo off

Set /p OldPC=Please enter the old PC name:
Set /p NewPC=Please enter the new PC name:

for /D %%D in ("\\%OldPC%\USERS\*") do (robocopy "\\%OldPC%\USERS\?\Desktop" "\\%NewPC%\Users\?\Desktop" /E /Z /W:10 /COPYALL /MAXAGE:90
for /D %%D in ("\\%OldPC%\USERS\*") do (robocopy "\\%OldPC%\USERS\?\Documents" "\\%NewPC%\Users\?\Documents" /E /Z /W:10 /COPYALL /MAXAGE:90
for /D %%D in ("\\%OldPC%\USERS\*") do (robocopy "\\%OldPC%\USERS\?\Favorites" "\\%NewPC%\Users\?\Favorites" /E /Z /W:10 /COPYALL /MAXAGE:90
for /D %%D in ("\\%OldPC%\USERS\*") do (robocopy "\\%OldPC%\USERS\?\Pictures" "\\%NewPC%\Users\?\Pictures" /E /Z /W:10 /COPYALL /MAXAGE:90

【问题讨论】:

    标签: batch-file cmd transfer robocopy user-profile


    【解决方案1】:

    我猜你需要的比你要求的要多。

    据我了解,您希望为从某个日期以来一直在使用计算机的用户复制用户配置文件文件夹。

    要解决这个问题,最好找到登录的用户,而不是找到任何被编辑的文件。查找已编辑的文件将花费太多时间来查找已使用的用户帐户的名称。

    由于有wevtutil 命令用于处理记录的事件,代码变得相当简单。

    所以代码看起来像这样:

    @echo off
    pushd %~dp0
    setlocal EnableDelayedExpansion
    
    ::User Input
    set /p OldPC=Please enter the old PC name: 
    set /p NewPC=Please enter the new PC name: 
    set /p UserName=Please enter the User name to use in %OldPC%: 
    set /p Password=Please enter the password to use in %OldPC%: 
    set /p MaxDate=Please enter the Maximum logon date: 
    cls
    
    
    echo Deriving User Names that are used since %MaxDate%...
    echo If this step takes too long, check if you typed correct user name and password.
    
    wevtutil qe Security /r:%OldPC% /u:%UserName% /p:%Password% /f:text /q:"*[System[TimeCreated[@SystemTime>='%MaxDate%T00:00:00'] and (EventID=4624)]]" |^
    findstr /b /c:" Account Name" >PossibleUserName.tmp1
    dir /b "\\%OldPC%\Users" >UserProfileList.tmp1
    findstr /g:"UserProfileList.tmp1" "PossibleUserName.tmp1"|sort >UserList.tmp2
    del /q *.tmp1
    
    cls
    echo Formatting User List...
    
    for /f "tokens=2 delims=:   " %%a in (UserList.tmp2) do (
        if not "!ln!"=="%%a" (
            set "ln=%%a"
            echo %%a>>FinalList.tmp
        )
    )
    del /q *.tmp2
    
    cls
    echo Copying Files...
    
    for /f "tokens=*" %%a in (FinalList.tmp) do (
        echo robocopy "\\%OldPC%\Users\%%a\Desktop" "\\%NewPC%\Users\%%a\Desktop" /e /z /w:10 /copyall
        echo robocopy "\\%OldPC%\Users\%%a\Documents" "\\%NewPC%\Users\%%a\Documents" /e /z /w:10 /copyall
        echo robocopy "\\%OldPC%\Users\%%a\Favorites" "\\%NewPC%\Users\%%a\Favorites" /e /z /w:10 /copyall
        echo robocopy "\\%OldPC%\Users\%%a\Pictures" "\\%NewPC%\Users\%%a\Pictures" /e /z /w:10 /copyall
    )
    
    echo Done!
    del /q *.tmp
    pause>nul
    exit
    

    由于您尝试使用远程计算机上的脚本,wevtutil 命令需要您旧 PC 的登录信息。

    此外,您需要在%MaxDate% 中输入要使用的日期,这将使您能够过滤自该日期以来的日志。 日期格式应如下所示:YYYY-MM-DD

    例如,如果您想过滤自 2017 年 1 月 1 日起使用计算机的用户,则应键入 2017-01-01 /em>

    如果您将旧计算机和新计算机都设置为共享具有正确属性的 Users 目录,那么您最好使用此代码。

    我希望这段代码能解决你的问题。

    【讨论】:

    • 太好了,感谢您提供的信息。我意识到我也写错了...我想完全跳过任何修改日期超过 90 天的用户配置文件,但我想复制为任何更新的配置文件列出的文件夹的所有内容比起那个来说。我写它的方式,我认为它会从所有用户文件夹中复制,但跳过任何超过 90 天的内容。我对么?我猜我可能在某个地方需要一个 IF 语句?
    • 这是另一个想法...使用 /MAXAGE 开关 Robocopy 整个 C:\Users 目录会更容易,然后 /XD 排除我不想要的配置文件文件夹,例如应用数据等?
    • @Andrew 为了把事情弄清楚,如果其中一个文件在 90 天内被修改,您是否尝试移动整个用户配置文件目录?
    • 您应该使用%%~nxD,以防文件夹名称包含.;而不是\\%OldPC%\USERS\%%~nD,您也可以简单地使用%%~D%%~fD...
    • 如果我要手动复制数据,我会浏览到 C:\Users,按修改日期排序,然后复制所有在 90 天内修改日期的用户配置文件,从而从所有仍然定期使用工作站的用户,并跳过那些不使用的用户。我正在尝试使用脚本完成相同的操作,另外还有一个好处是只从每个用户配置文件中复制桌面、文档、收藏夹和图片文件夹,从而通过跳过 AppData 等来加快传输速度。这能回答你的问题吗?
    猜你喜欢
    • 2016-10-01
    • 1970-01-01
    • 2018-10-20
    • 1970-01-01
    • 1970-01-01
    • 2011-06-14
    • 1970-01-01
    • 2013-04-26
    • 1970-01-01
    相关资源
    最近更新 更多