2017-01-09 6 views
0

J'essaie d'écrire un script que je peux utiliser pour transférer à distance des données de l'ordinateur d'un utilisateur final vers un nouveau que je prépare pour eux. J'ai besoin de transférer des données de plusieurs profils d'utilisateurs, donc je l'ai écrit pour faire défiler les profils utilisateur sur l'ancienne machine, mais je ne suis pas sûr de la syntaxe correcte dans quelques endroits, spécifiquement quelle variable j'ai besoin pour référencer l'utilisateur actuel dossier pendant que le script les parcourt (voir les points d'interrogation dans les répertoires répertoriés ci-dessous). Je l'ai écrit pour copier uniquement les profils utilisateur qui ont été utilisés dans les 90 derniers jours. Je voudrais copier quelques profils tels que Public, Default, etc indépendamment de l'âge, mais je vais probablement ajouter quelques lignes Robocopy pour accomplir cela.Robocopy script pour transférer les données utilisateur de l'ancien PC vers le nouveau PC

Quelqu'un peut-il me conseiller sur ce que la syntaxe doit être où les points d'interrogation apparaissent ci-dessous? Ce serait $ _ dans Powershell, mais je ne suis pas sûr de ce qu'il est dans un fichier batch CMD.

Merci à l'avance,

Andrew

@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 

Répondre

0

Je suppose que vous aviez besoin de plus que ce que vous avez demandé. D'après ce que j'ai compris, vous voulez copier les dossiers de profil utilisateur pour les utilisateurs qui ont utilisé l'ordinateur depuis une date donnée. Pour résoudre le problème, il serait préférable de trouver les utilisateurs qui se sont connectés plutôt que de trouver un fichier édité. La recherche de fichiers modifiés prendra trop de temps pour trouver simplement les noms des comptes d'utilisateurs utilisés.

Puisqu'il existe une commande wevtutil utilisée pour gérer les événements consignés, le code est devenu plus simple.

Ainsi, le code ressemble à ceci:

@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 

Puisque vous essayez d'utiliser le script de l'ordinateur distant, wevtutil commande journal requis dans les informations de votre ancien PC.

En outre, vous devez entrer la date que vous souhaitez utiliser dans %MaxDate%, ce qui vous permettra de filtrer les journaux depuis cette date. Le format de date devrait ressembler à ceci: AAAA-MM-JJ

Par exemple, vous devez taper 01/01/2017 si vous souhaitez filtrer les utilisateurs qui ont utilisé l'ordinateur depuis Janvier 1 , 2017.

Si vous définissez à la fois les anciens et les nouveaux ordinateurs pour qu'ils partagent leurs répertoires Users avec les propriétés correctes, vous pouvez utiliser ce code. J'espère que ce code résoudra votre problème.

+0

Super, merci pour l'info. Je me suis rendu compte que j'avais aussi quelque chose d'erroné ... Je veux complètement ignorer tout profil utilisateur dont la date de modification est antérieure à 90 jours, mais je veux copier tout le contenu des dossiers listés pour tout profil plus récent que ça. De la façon dont je l'ai écrit, je pense qu'il va copier à partir de tous les dossiers des utilisateurs, mais ignorer tout contenu datant de plus de 90 jours. Ai-je raison?Je devine que j'ai peut-être besoin d'une déclaration IF quelque part? – Andrew

+0

Voici une autre idée ... Serait-il plus facile de Robocopy tout le répertoire C: \ Users avec le commutateur/MAXAGE, puis/XD pour exclure les dossiers de profil que je ne veux pas, tels que appdata, etc? – Andrew

+0

@Andrew Pour effacer les choses, essayez-vous de déplacer tout le répertoire du profil utilisateur si l'un de ses fichiers est modifié dans les 90 jours? –