Batch file 用于将用户数据从旧PC传输到新PC的Robocopy脚本

Batch file 用于将用户数据从旧PC传输到新PC的Robocopy脚本,batch-file,cmd,transfer,robocopy,user-profile,Batch File,Cmd,Transfer,Robocopy,User Profile,我正在尝试编写一个脚本,我可以使用它将数据从最终用户的计算机远程传输到我正在为他们准备的新计算机。我将需要从多个用户配置文件传输数据,因此我编写了它以循环使用旧计算机上的用户配置文件,但我不确定在几个地方使用正确的语法,特别是在脚本循环使用当前用户文件夹时,我需要引用哪个变量(参见下面列出的目录中的问号) 我写它只是为了复制过去90天中使用过的用户配置文件。我想复制一些配置文件,如Public、Default等,而不管年龄大小,但我可能只需要再添加几个robocy行即可 有人能告诉我在下面出现问

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

我写它只是为了复制过去90天中使用过的用户配置文件。我想复制一些配置文件,如Public、Default等,而不管年龄大小,但我可能只需要再添加几个robocy行即可

有人能告诉我在下面出现问号的地方需要什么语法吗?这在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

我想你需要的比你要求的更多

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

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

由于有
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
命令需要旧电脑的登录信息

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

例如,如果要筛选自2017年1月1日以来使用计算机的用户,则应键入2017-01-01

如果您将新旧计算机都设置为使用正确的属性共享其
用户
目录,则最好使用此代码


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

太好了,谢谢您提供的信息。我意识到我也写错了一些东西……我想完全跳过任何修改日期超过90天的用户配置文件,但我想复制任何比这更新的配置文件列出的文件夹的所有内容。按照我的方式:itten,我想它会从所有用户文件夹中复制,但会跳过任何超过90天的内容。我说的对吗?我猜我可能需要一个IF语句?还有一个想法……用/MAXAGE开关自动复制整个C:\Users目录,然后用/XD排除我不想要的配置文件文件夹,这样会更容易吗如appdata等?@Andrew为了澄清问题,如果其中一个文件在90天内被修改,您是否试图移动整个用户配置文件目录?如果文件夹名包含
,您应该使用
%~nxD
;而不是
\\%OldPC%\USERS\%~nD
,您也可以简单地使用
%~D
%~fD…如果我手动复制数据,我会浏览到C:\Users,按修改日期排序,并复制90天内所有修改日期的用户配置文件,从而从仍定期使用工作站的所有用户复制数据,并跳过那些不使用的用户。我正试图用脚本完成同样的操作,添加了be只从每个用户配置文件复制桌面、文档、收藏夹和图片文件夹,从而通过跳过AppData等加快传输速度,这是否回答了您的问题?