Robocopy sortie fichier texte, supprimer les tabulations? [Résolu]

Signaler
Messages postés
73
Date d'inscription
lundi 22 février 2021
Statut
Membre
Dernière intervention
9 juin 2021
-
Messages postés
73
Date d'inscription
lundi 22 février 2021
Statut
Membre
Dernière intervention
9 juin 2021
-
Bonjour,

J'utilise un batch Robocopy pour copier sous Windows 10 la liste des films d'un disque dur externe dans un fichier sur un PC.
Le disque externe comporte des sous-dossiers alphabétisés (level 2) et un sous-dossier level 3 à exclure, ainsi que divers dossiers et fichiers liés au matériel à la racine et à exclure avec des commutateurs /XD et /XF, je vous passe le détail.

Reste donc la syntaxe qui suit:

chcp 1252 >nul
del c:\Users\bru\Desktop\films\films.txt
robocopy K:\ c:\Users\bru\Desktop\films /l /s /njh /njs /ns /lev:2 >> c:\Users\bru\Desktop\films\films.txt


Et qui donne une sortie qui ressemble à ça:


K:\
  • Fichier SUPPL. films.txt

Nouveau rép. K:\0\
Nouveau fichier 10_minutes_a_vivre.avi
Nouveau fichier 36_quai_des_orfevres.avi
Nouveau rép. K:\A\
Nouveau fichier Affames.avi
Nouveau fichier Anna_Karenine.avi

-Robocopy "crée" le fichier films.txt dans la destination alors que supprimé avant exécution?
-Robocopy génère:
--1 ligne vierge au début du fichier
--les noms "Nouveau rép". et "Nouveau fichier"
--l'ouverture par Notepad++ fait ressortir la structure suivante passée sous silence la 2ème ligne K:\ dont on peut se passer:
tabulation-Nouveau rép.-tabulation-K:\(nom)
tabulation-2 espaces-Nouveau fichier-3 tabulations-(nom)

J'aimerai me débarrasser au moins de la tabulation à gauche, de "nouveau rép." et de "nouveau fichier", substituant à ce dernier le nom du film. Notepad++ fait le job via substitution des tabulations par des points puis rechercher-remplacer, mais a priori pas automatisable.

Il faut donc, quitte à remplacer les "expressions coupables" par rien ou un point, probablement appliquer à Robocopy une syntaxe For /f avec délimiteurs adéquats et/ou find, mais je ne trouve rien qui fonctionne.

Si quelqu'un a l'inspiration, merci.

5 réponses

Messages postés
13508
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
9 juin 2021
4 382
Bonjour,

Ce que tu veux faire est trop compliqué.

S'il s'agit de créer une liste, pourquoi ne pas utiliser simplement un FOR avec un ECHO ?

Si tu as des choses à filtrer, tu peux ensuite rajouter des FIND.

set "filtre=*.mpeg *.mpg *.avi *.mkv *.3gp *.aaf *.asf *.flv *.mp4 *.ogg *.ogm *.mov *.webm *.rm *.dpx *.mxf *.omfi *.vob *.wmv *.xvid *.divx *.3ivx *.bik *.bik2 *.bk2" 

for /r K:\ %%A in (%filtre%) do echo %%A >>C:\Users\bru\Desktop\films\films.txt




“L'intelligence artificielle se définit comme le contraire de la bêtise naturelle.”
Messages postés
73
Date d'inscription
lundi 22 février 2021
Statut
Membre
Dernière intervention
9 juin 2021
2
Certes, la syntaxe est simple (et un peu à modifier puisque en renommant les fichiers j'ai oublié une cédille et que j'ai des extensions en plus et en moins):


@echo off
chcp 1252 >nul
set "filtre=*.avi *.ts *.mkv *.mp4 *.mpg

for /r K:\ %%A in (%filtre%) do echo %%A >>C:\Users\bru\Desktop\films\temp.txt


ça sort sous la forme:
K:\EF\Full_metal_jacket.avi

et j'en ai rajouté une couche en passant par un fichier temp:

@echo off
chcp 1252 >nul
for /f "tokens=1,2,3 delims=\" %%a in ('type "C:\Users\bru\Desktop\films\temp.txt"') do (
echo %%c >> C:\Users\bru\Desktop\films\films.txt

)


parce que je n'ai pas été fichu de trouver comment imbriquer la 2ème dans la première, là on a:
Full_metal_jacket.avi

Mais si j'ai envisagé de détourner une autre commande, c'est parce que:
1) La poubelle pourtant vide ne l'est pas et pas une extension à exclure: K:\$RECYCLE.BIN\$IJKEPSS.mp4
2) Toute commande que j'ai utilisée pour l'instant hors robocopy me retourne les fichiers d'un dossier "LAP" pourtant comme les autres après ceux du dossier "UZ"
3) Et parce que j'ai besoin de critères d'exclusion: 1 des dossiers (Records) contient à sa racine des fichiers .ts qui seront copiés et autres extensions qui seront exclues mais plusieurs sous-dossiers (au nom de chaque film) et comprenant chacun plusieurs .ts eux à exclure avec pour particularité de toujours s'appeler 00n.ts où n est un seul chiffre variable, il faut dans ces conditions soit exclure 00*.ts, soit exclure tous les dossiers au sens de robocopy de niveau 3.

Mais bien sûr, et pendant que je suis à abuser, si tu trouves une syntaxe plus simple pour faire le job, je suis preneur.
Merci.
Messages postés
13508
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
9 juin 2021
4 382
Si tu veux juste récupérer le nom du fichier vidéo sans son chemin il n'y a pas besoin d'utiliser une deuxième boucle FOR, il faut utiliser les variables de substitution comme ceci :

@echo off
chcp 1252 >nul
set "filtre=*.avi *.ts *.mkv *.mp4 *.mpg"
 
for /r K:\ %%A in (%filtre%) do echo %%~nxA >>C:\Users\bru\Desktop\films\films.txt


1) Je ne comprends pas le sens de ta phrase : faut-il exclure ou inclure les fichiers de la corbeille ?

2) Ma boucle solutionne le problème

3) Voilà comment exclure les fichiers 00*.ts :
@echo off
chcp 1252 >nul
set "filtre=*.avi *.ts *.mkv *.mp4 *.mpg"
 
for /r K:\ %%A in (%filtre%) do echo %%~nxA | findstr /v /r "^00[0-9].ts" >>C:\Users\bru\Desktop\films\films.txt
Messages postés
73
Date d'inscription
lundi 22 février 2021
Statut
Membre
Dernière intervention
9 juin 2021
2
Nickel pour éviter la 2ème boucle, merci (il va falloir maintenant que je suis retraité que je prenne un peu de temps pour re-potasser la ligne de commandes...).

1) Pour la poubelle: à l'idéal elle devrait être vide et apparaît sous Windows comme telle, le problème ne devrait dons pas se poser; mais en attendant de la vider réellement manu militari, non, bien sûr, je ne veux pas les fichiers mp4 qui s'y trouvent, mais conserver ceux qui n'y sont pas.

2) Non, non, la boucle ne résout pas le problème alphabétique, fin (partielle) du fichier, les 2 premiers étaient dans le dossier UZ, les 3 suivants dans le dossier LAP (pour L apostrophe, la passerelle multimedia n'aime pas):

Un_long_dimanche_fiancailles1.ts
Un_long_dimanche_fiancailles2.ts
Lhorloger_de_Saint_Paul.avi
Larmee_du_crime.avi
Lete_meurtrier.ts

3) Le dossier K:\Records (à la racine comme K:\LAP ou K:\UZ) comporte à sa propre racine (partiel):
La_leçon_de_piano.ts, La_leçon_de_piano.info, La_leçon_de_piano.ts.ast, La_leçon_de_piano.ts.lck: le script ne garde que le 1er et c'est parfait.
Mais il y a aussi un dossier K:\Records\La_leçon_de_piano qui contient:
00n.dvr, 00n.ts, info3.dvr, ici n vaut de 1 à 3, pour un film plus long ça peut aller jusqu'à 7 (le disque est en FAT32 parce que l'enregistreur ne supporte pas autre chose et saucissonne le film en autant de morceaux de 1 Go).
Tout ce qui s'y trouve n'y est qu'en attendant que je recolle les morceaux hors pub dans un seul fichier hors \Records ou parce que ça n'est pas possible (par exemple échec sur les formats de sous-titres), mais je n'en ai jamais besoin puisque le titre se trouve de toute façon dans le fichier bidon .ts (1 Ko !!!) à la racine de \Records

La dernière syntaxe que tu m'as gentiment fournie (et que je suis aller déchiffrer sur ss64, je mourrai moins bête) place en outre les fameux fichiers de \Records en tête de gondole, partiel:

La_leçon_de_piano.ts (racine de \Records)
cheval_de_guerre.ts
000.ts (sous-dossiers de \Records, 1 par nom)
001.ts
002.ts
000.ts
000.ts
001.ts
002.ts
003.ts
$IJKEPSS.mp4 (Poubelle)
$ILZHB8S.mp4
36_quai_des_orfevres.avi
Apocalypse_now.avi
Messages postés
13508
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
9 juin 2021
4 382
2) Comme tu peux le vérifier sur l'image, le film du dossier LAP est listé avant les films du dossier UN :
Messages postés
73
Date d'inscription
lundi 22 février 2021
Statut
Membre
Dernière intervention
9 juin 2021
2
Je ne le conteste pas et c'est logique, mais pas chez moi; c'est un dossier que j'ai renommé il y a quelque temps (toujours en L) mais qui n'a rien de particulier par rapport aux autres (même date de création, mêmes attributs...).

Pendant que je suis là, je n'avais pas regardé de près, la syntaxe que tu m'as proposée n'alphabétise pas dans chaque dossier, par exemple dans le dossier K:\LE:

Le_secret_de_Brokeback_Mountain.avi
Le_vieux_fusil.ts
Le_grand_bleu.ts
Le_nom_de_la_rose.ts
Messages postés
13508
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
9 juin 2021
4 382
Ok je m'en occupe ;)
Messages postés
73
Date d'inscription
lundi 22 février 2021
Statut
Membre
Dernière intervention
9 juin 2021
2
Je vais te donner des cheveux blancs...
La poubelle, c'est réglé, je l'ai tuée sous Dos, un souci de moins.
L'arborescence DIR K: donne bien \Records en tête de gondole et \LAP à la fin, voilà pourquoi votre fille est muette (et problème qui n'apparaît pas avec robocopy).
La passerelle est casse-dépendante, mais pas Dos (Records au lieu de RECORDS, et de toute façon c'est R...).
Je cherche en même temps ce que je trouve pour ces dossiers, quant au sous-dossier de \Records, à part l'exclusion totale du dossier ou tous les fichiers 00*.ts?
Merci
Messages postés
73
Date d'inscription
lundi 22 février 2021
Statut
Membre
Dernière intervention
9 juin 2021
2 >
Messages postés
13508
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
9 juin 2021

Absolument parfait sinon que tu as oublié de supprimer le fichier temp (je rajouterai la ligne pour l'itération suivante du script).
Merci infiniment.
Mais plutôt que de recopier bêtement une recette de cuisine, même sophistiquée, si tu as à l'occasion un moment pour la traduction: je ne suis pas sûr de ton pipe "sort" et, suite à l'histoire de poubelle (qui ne sert plus au moins jusqu'à la prochaine grève des éboueurs), je suppose que la sentence findstr sert à virer les fichiers ts parasites de \Records?
Encore une fois merci.
Messages postés
13508
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
9 juin 2021
4 382 >
Messages postés
73
Date d'inscription
lundi 22 février 2021
Statut
Membre
Dernière intervention
9 juin 2021

Oui le FINDSTR sert à exclure les fichiers qui correspondent à cette REGEX : 00n.

Le TYPE affiche la liste de vidéos et le pipe SORT permet de le classer par ordre alphabétique.
Le premier SORT (au niveau de la boucle) peut être supprimé.

Vu qu'il n'y a plus besoin de gérer la poubelle, mon IF devient inutile mais il n'empêche pas le bon fonctionnement du script.

Tu m'excuseras pour le fichier temp, ce n'est pas un oubli c'est juste un peu de fainéantise, je me suis dit que tu pourrais te charger de cette tâche ingrate ;)

Est-ce que tu n'as pas de problème dans ta liste finale concernant les caractères accentués ou bien les cédilles ?
Messages postés
73
Date d'inscription
lundi 22 février 2021
Statut
Membre
Dernière intervention
9 juin 2021
2 >
Messages postés
13508
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
9 juin 2021

OK, j'étudierai les détails de ton script à tête reposée pour éviter la prochaine fois d'enquiquiner le monde pour des histoires de films (encore que je m'en fichais un peu, les listes moches étaient utilisables, c'était juste pour le vice de trouver).

Oui, oui, j'avais viré tous les caractères spéciaux et les espaces sauf La_leçon_de_piano.ts que j'avais oublié, le copier-coller passe nickel comme tu peux en juger.
Messages postés
13508
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
9 juin 2021
4 382 >
Messages postés
73
Date d'inscription
lundi 22 février 2021
Statut
Membre
Dernière intervention
9 juin 2021

Ok si tu as d'autres questions n'hésite pas.

Bonne nuit.
Messages postés
73
Date d'inscription
lundi 22 février 2021
Statut
Membre
Dernière intervention
9 juin 2021
2 >
Messages postés
13508
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
9 juin 2021

Merci, bonne nuit de même, il est temps de sortir ma chienne si je ne veux pas qu'elle me réveille à 3h00...