J'ai deux disques durs, j'ai tout copié d'un disque dur sur un nouveau disque, mais certains fichiers n'ont pas été copiés car ils étaient corrompus. Existe-t-il un moyen simple de vérifier quels fichiers d'un disque dur ne sont pas sur l'autre ?
Réponses
Trop de publicités?robocopy sourcedriveletter: destinationdriveletter: /MIR /LOG:logfilename.txt /TEE /L
Robocopy est un outil de ligne de commande intégré à Windows. Vous pouvez vérifier les options en ouvrant une invite cmd (à cet effet, probablement en tant qu'administrateur je suppose) et en tapant robocopy /?
o robocopy /? > %USERPROFILE%\desktop\robocopyoptions.txt
si vous voulez une version texte du document d'aide.
Dans mon exemple ci-dessus, /MIR
signifie "miroir" et duplique la "source" dans la "destination", et supprime tout ce qui se trouve dans la "destination" et qui n'est pas dans la "source".
/log:
les journaux dans un fichier, /TEE
sort dans la console ainsi que dans le fichier journal.
La commande finale /L
permet de lister uniquement les fichiers, sans les copier ou les supprimer.
Le journal vous montrera très clairement quels fichiers de la source n'existent pas dans la destination.
Bien entendu, je vous recommande vivement d'examiner d'abord la documentation d'aide pour vous assurer que mon exemple est correct.
feedback du PO : la méthode excel n'a pas fonctionné pour lui, la méthode Matlab n'a pas été testée. J'ai une solution très inélégante, mais je pense qu'elle fait l'affaire (en supposant que vous ayez Excel). Cela ne fonctionne que si le nombre de noms de fichiers tient dans excel. (excel a un nombre maximum de lignes limité : 1 048 576).
Allez dans cmd (je suppose que vous êtes sous Windows). Changez de répertoire pour aller sur le premier lecteur. Tapez :
dir /s/b/o:gn > drive1.txt
Faites de même pour le deuxième lecteur, mais changez le nom du fichier txt.
J'ai pris la ligne cmd de : https://stackoverflow.com/questions/3447503/how-to-get-a-list-of-sub-folders-and-their-files-ordered-by-folder-names .
Copiez les deux sorties dans Excel (en supposant qu'il s'agisse de 2007 ou d'une version plus récente). L'option la plus simple que je connaisse est la suivante :
- Sélectionnez les colonnes qui contiennent les sorties cmd.
- Dans l'onglet Données du groupe Trier et filtrer, cliquez sur Avancé.
- Dans la boîte de dialogue Filtre avancé, effectuez l'une des opérations suivantes :
- Pour filtrer la plage de cellules ou le tableau en place, cliquez sur Filtrer la liste, en place.
- Pour copier les résultats du filtre vers un autre emplacement, procédez comme suit :
- Cliquez sur Copier vers un autre emplacement.
- Dans la zone Copier vers, saisissez une référence de cellule.
- Vous pouvez également cliquer sur l'image du bouton de dialogue Réduire pour masquer temporairement la boîte de dialogue, sélectionner une cellule de la feuille de calcul, puis appuyer sur l'image du bouton de dialogue Développer.
- Cochez la case Enregistrements uniques uniquement, puis cliquez sur OK.
- Les valeurs uniques de la plage sélectionnée sont copiées vers le nouvel emplacement. Les données d'origine ne sont pas affectées.
De cette façon, vous devriez avoir une liste de tous les noms de fichiers uniques, ce qui est identique à une liste de tous les noms de fichiers qui n'ont pas été copiés.
La procédure excel a finalement été reprise : https://support.office.com/en-us/article/Filter-for-unique-values-or-remove-duplicate-values-d6549cf0-357a-4acf-9df5-ca507915b704#bmfilter_for_unique_values
Vous pouvez également utiliser la commande cmd dans Matlab.
La commande dans Matlab pourrait être :
DosCommand=sprintf('%s %s','dir / B',directory);
[status, cmdout]=dos(DosCommand);
end
Filenames = strread(cmdout,'%s');
Alors exécutez :
NonCopiedFilenames =
A(sum(bsxfun(@eq, A(:), A(:).'))==1);
Le truc des valeurs uniques a été copié à partir de : https://stackoverflow.com/questions/19236914/how-to-find-a-unique-value-in-a-matrix-by-using-matlab