J'utilise un outil de copie rapide pour alimenter une clé usb à partir d'un répertoire et tous ses sous-répertoires.
L'outil crée les noms de fichiers avant la copie proprement dite, et lorsque la place vient à manquer sur la clé, ces fichiers demeurent avec une taille à zéro.
J'effectue des fusions à chaque transfert de données sur la clé et je choisis de garder les fichiers existants pour n'alimenter que les nouveaux fichiers, (ce qui est plus évidemment rapide que de tout écraser sur une clé de 64 Go !)
Aussi, comme l'outil ne permet pas d'écraser seulement les fichiers de taille nulle, je voudrais éliminer ces fichiers de la clé pour qu'à la nouvelle fusion, ils soient recopiés.
Seulement, je butte sur les commandes For /F, car celles-ci parcourent les sous-répertoires à partir d'un répertoire parent préalablement fixé, ce qui aboutit à des noms de répertoires trop longs (pour ce pauvre vieux DOS).
J'en viens à me demander si c'est possible en fichier de commande, (sans déplacer des montagnes... de code), ou si ce serait plutôt réalisable en VB ou avec un shell Unix (comme il en existe d'adaptés à Windows), mais là,c'est moi qui cale...
J'ai adapté ce bout de batch en utilisant une commande trouvée sur internet :
for /f "tokens=1*" %i in ('forfiles /p "%cd%" /c "cmd /c echo @fsize @path"') do if /i %~zj equ 0 echo %j>> test.txti equ 0 echo %j>> sortie.txt
mais il inscrit sur le fichier sortie.txt les répertoires qui ont un fichier vide, et non pas les seuls fichiers de taille nulle qu'ils contiennent !
Partager