Fichier de commandes Windows pour trouver les doublons dans un arbre
J'ai besoin d'un fichier de commandes ( Windows CMD est l'interprète, une .chauve-souris ) pour faire ce type de tâche:
1) Recherche par le biais d'un dossier et ses sous-dossiers
2) de Trouver des fichiers avec le même nom de fichier et l'extension ( aka les doublons )
3) Vérifier si ils ont la même taille
4) Si le même nom de même taille, l'écho de tous les fichiers sauf le premier ( ou presque j'ai besoin de supprimer toutes, sauf une copie )
Merci pour tout type d'aide
Ce n'est qu'un script initial, juste pour vérifier les fichiers dans un dossier et ses sous-dossiers, et leur taille:
@Echo off
Setlocal EnableDelayedExpansion
Set Dir=C:\NewFolder
For /r "%Dir%" %%i in (*) do (
Set FileName=%%~nxi
Set FullPath=%%i
Set Size=%%~zi
Echo "!FullPath!" - SIZE: !Size!
)
Echo.
Pause
Pouvez-vous ajouter un peu de code que vous avez essayé? En outre, certaines informations (par exemple) de votre système d'exploitation ou l'interpréteur de commandes qui serait utile pour le potentiel answerers
Bien le code que j'ai écris a un problème après la boucle, je ne pense pas que le système opératif faire une différence pour une .bat / CMD mais est Windows XP
Essayez de regarder ceci: superuser.com/questions/366487/... je n'ai pas essayé d'écrire le script/fichiers par lots pour Windows, mais il semble qu'au moins un certain succès a été eu par la question asker dans ce cas. En particulier, jetez un oeil à
forfiles /s /p <myPathWithoutBracketsHere> /c "echo @relpath" donnera une liste de tous les fichiers en chemin relatif, par exemple
J'ai Xp et je n'ai pas forfiles, ce n'est pas un problème pour obtenir le chemin d'accès du fichier ( comme
Bien le code que j'ai écris a un problème après la boucle, je ne pense pas que le système opératif faire une différence pour une .bat / CMD mais est Windows XP
Essayez de regarder ceci: superuser.com/questions/366487/... je n'ai pas essayé d'écrire le script/fichiers par lots pour Windows, mais il semble qu'au moins un certain succès a été eu par la question asker dans ce cas. En particulier, jetez un oeil à
forfiles
, qui est (selon Wikipedia) disponible à partir de windows Vista à partir de: en.wikipedia.org/wiki/Forfilesforfiles /s /p <myPathWithoutBracketsHere> /c "echo @relpath" donnera une liste de tous les fichiers en chemin relatif, par exemple
J'ai Xp et je n'ai pas forfiles, ce n'est pas un problème pour obtenir le chemin d'accès du fichier ( comme
FOR /R "MYDIR" %%i IN (*) DO ECHO %%i
) mais c'est pour vérifier le double, la taille du fichier et la comparaison de toutes les informationsOriginalL'auteur Thummer | 2014-09-27
Vous devez vous connecter pour publier un commentaire.
Ce script fait ce que vous demandez. Il suffit de régler la RACINE variable en haut de pointer vers la racine de votre arborescence.
Mais vous pouvez faire le test plus précis en utilisant des FC pour comparer le contenu des fichiers. Aussi, vous pouvez intégrer la commande DEL directement dans le script. Le script ci-dessous affiche les commandes qui aurait pour effet de supprimer les fichiers en double. Suppression de l'ÉCHO avant la commande DEL lorsque vous êtes prêt à réellement supprimer les fichiers.
Les deux ensembles de code peut sembler trop compliqué, mais c'est seulement parce que j'ai structuré le code pour être robuste et d'éviter les problèmes qui peuvent peste des solutions simples. Par exemple,
!
dans les noms de fichiers peuvent causer des problèmes POUR les variables si l'expansion retardée est activé, et=
dans le nom de fichier sont les causes d'un problème avec npocmoka de la solution.De quoi avez vous besoin de retirer d'ici à la recherche de doublons qui n'ont pas nécessairement le même nom de fichier? Donc je suppose que le meilleur moyen serait de vérifier la taille et de faire des fc sur les fichiers avec la même taille.
OriginalL'auteur dbenham
=
caractère. Mais sinon, c'est une bonne et simple de l'algorithme.Pourquoi l'expansion retardée lorsque vous ne l'utilisez pas? Cela va causer des problèmes si le nom contient
!
. Votre algorithme n'a pas besoin d'expansion retardée.Non, S'il est DÉFINI n'a pas besoin d'expansion retardée - qui est l'une des raisons pour lesquelles je l'aime 🙂 Vous avez aussi un bug de votre nom de variable doit inclure l'extension.
Vous disposez également d'un bug de votre nom de variable doit inclure l'extension.
Une dernière chose 😉 Vous devriez probablement ajouter un préfixe à chaque nom de variable, et d'effacer toutes les variables qui commencent par le préfixe au début. Vous ne voulez pas un résultat faux parce que de toutes les variables existantes.
OriginalL'auteur npocmaka