Il y a beaucoup de possibilités pour copier tous les dossiers d'un lecteur à un autre lecteur, par exemple pour l'opération de sauvegarde, sauf certains dossiers spécifiés.
Voici une solution de travail pour Windows XP et toute version de Windows plus tard:
@echo off
:FindDrive
cls
echo Search for external USB hard disk for backup ...
%SystemRoot%\System32\wbem\wmic.exe LOGICALDISK GET DeviceID,DriveType /Format:CSV >"%TEMP%\DataBackup.tmp"
for /F "skip=2 tokens=2,3 delims=," %%A in ('type "%TEMP%\DataBackup.tmp"') do (
if "%%B" == "3" if exist "%%A\DataBackup\" set "BackupDrive=%%A" & goto RunBackup
)
del "%TEMP%\DataBackup.tmp"
echo/
echo Could not find USB hard disk with folder DataBackup.
echo/
%SystemRoot%\System32\choice.exe /C YN /N /T 10 /D Y /M "Try again (Y/n): "
if errorlevel 2 goto :EOF
goto FindDrive
:RunBackup
del "%TEMP%\DataBackup.tmp"
echo USB hard disk detected as drive %BackupDrive%
for /D %%D in (%SystemDrive%\*) do :BackupFolder "%%D"
rem for /F "delims=" %%D in ('dir %SystemDrive%\* /AD /B 2^>nul') do call :BackupFolder "%SystemDrive%\%%D"
goto :EOF
:BackupFolder
if /I "%~1" == "%SystemRoot%" goto :EOF
if /I "%~1" == "%ProgramFiles%" goto :EOF
if /I "%~1" == "%ProgramFiles(x86)%" goto :EOF
if /I "%~1" == "%SystemDrive%\$RECYCLE.BIN" goto :EOF
if /I "%~1" == "%SystemDrive%\System Volume Information" goto :EOF
echo/
echo Creating backup of folder "%~1" ...
echo/
%SystemRoot%\System32\xcopy.exe "%~1\*" "%BackupDrive%\DataBackup\%~nx1\" /C /E /H /I /K /M /Q /R /Y
goto :EOF
La partie supérieure est juste pour savoir si un disque dur USB avec le dossier DataBackup
est actuellement branché et quel est son lecteur lettre.
L'utilisateur du fichier batch est averti du disque dur USB manquant avec le dossier pour la sauvegarde des données et peut annuler l'opération de sauvegarde en appuyant sur la touche N (insensible à la casse). Ou l'utilisateur appuie sur la touche Y et une autre approche est faite pour trouver le disque dur de sauvegarde. Après 10 secondes, le fichier de commandes répond automatiquement à l'invite avec Y
et effectue une approche supplémentaire pour trouver le lecteur de sauvegarde.
Pièce selon la question commence par la ligne de commande:
for /D %%D in (%SystemDrive%\*) do :BackupFolder "%%D"
Les POUR appels en boucle pour chaque répertoire non caché dans la racine du système d'entraînement du sous-programme BackupFolder
avec le nom du répertoire en tant que paramètre.
La ligne suivante commentée avec la commande REM traiterait également les répertoires à la racine du lecteur système avec l'ensemble d'attributs masqué. Une fois que la boucle a terminé le traitement de tous les dossiers (non cachés) sur le lecteur système, l'exécution du fichier de traitement par lots est exécutée avec la commande goto :EOF
en évitant le sous-programme BackupFolder
sous le code principal du fichier séquentiel. Le sous-programme BackupFolder
contient en premier plusieurs comparaisons exécutées entre majuscules et minuscules du nom de dossier transmis avec chemin d'accès avec des chaînes prédéfinies pour ignorer les dossiers standard Windows. Le répertoire Windows, les répertoires des fichiers programme et les répertoires cachés de la corbeille et la restauration du système sont ignorés en quittant le sous-programme avec goto :EOF
sur une comparaison de chaîne positive. Sinon, tous les fichiers et sous-dossiers du dossier transmis avec le jeu d'attributs d'archivage sont copiés dans le dossier de sauvegarde de données sur le disque dur USB et l'attribut archive sur les fichiers du dossier source est supprimé pour éviter de copier les mêmes fichiers non modifiés . Par conséquent, la commande XCOPY copie uniquement les fichiers et dossiers nouveaux ou modifiés depuis la dernière exécution de ce fichier batch sur le disque dur de sauvegarde, ce qui réduit le temps total nécessaire à la sauvegarde. Bien qu'il existe de nombreuses autres possibilités pour exclure des fichiers et dossiers d'une opération de sauvegarde, je préfère cette méthode car il est très facile de dupliquer une des lignes de commande if /I "%~1" == "..." goto :EOF
et de modifier la chaîne à droite pour ignorer un fichier de plus ou dossier. Et plus de dossiers à partir d'autres lecteurs peuvent être facilement copiés en appelant BackupFolder
dans le bloc de commande ci-dessous l'étiquette RunBackup
pour ces dossiers supplémentaires.
Veuillez noter que ce fichier de commandes ne supprime jamais les fichiers et les dossiers sur un lecteur de sauvegarde qui n'existe plus dans le dossier source. Donc, un nettoyage de fichier/dossier sur le disque de sauvegarde doit être fait de temps en temps manuellement. Ceci est pour la sécurité pour empêcher une suppression automatique du dossier/dossier de sauvegarde si un fichier/dossier dans un dossier source a été supprimé par erreur et cela n'a pas été immédiatement reconnu et le fichier/dossier a été restauré en utilisant le disque dur de sauvegarde. Pour comprendre les commandes utilisées et leur fonctionnement, ouvrez une fenêtre d'invite de commande, exécutez les commandes suivantes et lisez attentivement toutes les pages d'aide affichées pour chaque commande.
choice /?
cls /?
del /?
dir /?
echo /?
for /?
goto /?
if /?
rem /?
type /?
wmic /?
wmic logicaldisk /?
wmic logicaldisk get /?
xcopy /?
Lire aussi l'article Microsoft à propos Using Command Redirection Operators et la réponse sur Single line with multiple commands using Windows batch file.
Que voulez-vous dire par dossiers réguliers? Pouvez-vous s'il vous plaît essayer d'expliquer exactement ce que vous voulez copier. Voulez-vous simplement copier des répertoires de profils d'utilisateurs individuels, uniquement des répertoires non système ou autre chose. – Compo
Désolé, je voulais dire que Windows, Program Files, Program Files (x86), Utilisateurs, ProgramData etc. sont souvent créés par le système, et je voulais seulement créer une sauvegarde pour les dossiers créés par l'utilisateur, au cas où ils créeraient des dossiers personnels – user3839914
Votre question est donc beaucoup trop large, il est impossible qu'une commande simple ou relativement complexe puisse facilement différencier les fichiers et les répertoires créés par l'utilisateur, ceux qui sont créés par le système, ceux qui ont des permissions utilisateur, ceux qui existent utilisateur créé dans ceux qui ont été créés par le système, etc. Même en vérifiant ce qui a été créé, ou modifié après une date spécifique, vous n'isolerez pas ce dont vous avez besoin. – Compo