2017-01-09 7 views
0

최종 사용자의 컴퓨터에서 새 컴퓨터로 데이터를 원격 전송할 때 사용할 수있는 스크립트를 작성하려고합니다. 여러 사용자 프로필의 데이터를 전송해야하므로 이전 시스템의 사용자 프로필을 순환하도록 작성했지만 두 곳에서 올바른 구문을 알지 못합니다. 특히 현재 사용자를 참조해야하는 변수 폴더에 저장됩니다 (아래 나열된 디렉토리의 물음표 참조).이전 PC에서 새 PC로 사용자 데이터를 전송하는 Robocopy 스크립트

지난 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 

답변

0

나는 당신이 무엇을 요구보다 더 필요한 것 같아요.

내가 알기 론부터, 컴퓨터를 사용하고있는 사용자의 사용자 프로필 폴더를 일부 날짜 이후에 복사하려고합니다.

문제를 해결하려면 편집 된 파일을 찾는 것보다는 로그온 한 사용자를 찾는 것이 좋습니다. 편집 된 파일을 찾는 것은 너무 많은 시간을 소비하여 사용 된 사용자 계정의 이름을 찾습니다.

로깅 된 이벤트를 처리하는 데 사용되는 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 

당신이 당신의 오래된 PC에 대한 정보를 원격 컴퓨터, wevtutil 명령에 필요한 로그에서 스크립트를 사용하려고하기 때문에.

또한 사용하려는 날짜를 %MaxDate%에 입력해야 해당 날짜 이후의 로그를 필터링 할 수 있습니다. 날짜 형식은 다음과 같아야합니다 년 1 월 1 일 때문에 컴퓨터를 사용하는 사용자를 필터링 할 경우 YYYY는-MM-DD

예를 들어, 2017년 1월 1일를 입력해야 , 2017.

올바른 컴퓨터 속성을 가진 Users 디렉토리를 공유하기 위해 이전 컴퓨터와 새 컴퓨터를 모두 설정하면이 코드를 사용하는 것이 좋습니다.

이 코드가 문제를 해결할 수 있기를 바랍니다.

+0

정보를 제공해 주셔서 감사합니다. 나는 잘못된 것을 쓰고 있음을 깨달았습니다 ... 90 일 넘게 수정 된 날짜를 가진 사용자 프로필을 완전히 건너 뛰고 싶습니다. 그러나 최근의 모든 프로필에 대해 나열된 폴더의 모든 내용을 복사하려고합니다. 그것보다. 필자가 작성한 방식으로 모든 사용자 폴더에서 복사하지만 90 일 이상 된 내용은 건너 뜁니다. 나 맞아?나는 어쩌면 IF 진술이 필요하다고 생각하고 있나? – Andrew

+0

또 다른 생각은 ... Robocopy는/C : \ Users 디렉토리와/MAXAGE 스위치를 사용하는 것이 더 쉬울 것이고/XD는 appdata와 같은 원하지 않는 프로필 폴더를 제외시키는 것이 더 쉬울까요? – Andrew

+0

@Andrew 일을 지우려면 파일 중 하나가 90 일 이내에 수정되면 전체 사용자 프로필 디렉토리를 이동하려고합니까? –