Version imprimable du sujet

Cliquez ici pour voir ce sujet dans son format original

Forums MacBidouille _ Autres Logiciels _ renommer fichier

Écrit par : phmitch 7 Mar 2017, 13:22

Bonjour,

renommer par exemple: Fichier de test 30.12.2017 pour obtenir: 2017.12.30 Fichier test
Quel soft peut faire ça ?

D'avance merci

Écrit par : baron 7 Mar 2017, 13:39

Bonjour,

Tu pourrais essayer A Better Finder Rename : http://www.publicspace.net/ABetterFinderRename/

Écrit par : JLB21 7 Mar 2017, 13:50

http://namechanger, super…

Écrit par : legallou 7 Mar 2017, 14:10

Il y a AppleScript ou en programmation plus simple à appréhender LiveCode gratuit le successeur d'HyperCard

ci-joint un exemple en AppleScript, à adapter suivant ses besoins :

-- Add a given suffix to all files of a given folder - no embedded folder level
--
display dialog "You may use the application «A better Finder Rename»" buttons {"Continue", "Stop"} default button 2
if the button returned of the result is "Stop" then return

tell application "Finder"
set AppleScript's text item delimiters to "" -- security
choose folder with prompt "Choisissez le dossier concerné" -- Only one level
set dossier_selectionne to result as string
open the folder dossier_selectionne

display dialog "Quel suffix à ajouter" default answer "suffix" buttons {"Cancel", "OK"} default button 2
copy the result as list to {text_returned, button_pressed}
if button_pressed is "OK" then
set suffix to " " & text_returned
else
return
end if

set NbFiles to count of file of folder dossier_selectionne

repeat with x from 1 to NbFiles
set nom_de_document to name of file x of folder dossier_selectionne

set AppleScript's text item delimiters to "."
set les2partie to (every text item of nom_de_document) -- création de la liste
set item1 to (item 1 of les2partie) & suffix & "."
set name of file x of folder dossier_selectionne to item1 & (item 2 of les2partie)
end repeat
set AppleScript's text item delimiters to "" -- retour à la normal
end tell




Un autre exemple de Livecode "Renumérote tous les noms de fichier d'un dossier". c'est beaucoup plus lisible.


18 jan 2016 - V1.0 Copyright Alain Le Gallou
Renumérote tous les noms de fichier d'un dossier xx
Résultat dans un dossier xxBis
Ne traite que les fichiers de données .jpg .txt .... pas les applications
Mettre la logique de changement de nom du fichier dans
la function newFileName

Local numero = 100 -- départ de la nouvelle numérotation

on mouseUp
answer folder "Select input folder Path via the Finder"
if the result is "cancel" then exit mouseUp
else put it into folderPath --> /Users/alg/Desktop/aWorking
set the defaultFolder to folderPath
put the files into listFileName -- The list of all fileName

-- Suppression des fichiers systèmes (.DS_Store, etc)
repeat with i = 1 to the number of lines of listFileName
If the first char of line i of listFileName is "."
then delete line i of listFileName
end repeat

-- Create the new folder container xxxBis
put folderPath &"Bis" into folderPathBis
if there is no folder folderPathBis
then create folder folderPathBis
else alreadyExist

-- Define the complet folder path for URL command
put "binfile:" & folderPath & slash into folderDepart -- "binfile:/Users/alg/Desktop/aTest/"
put "binfile:" & folderPath & "Bis" & slash into folderToCopy -- "binfile:/Users/alg/Desktop/aTestBis/"

-- Copy and change file name
repeat with i = the number of lines of listFileName down to 1 -- From last to first
put line i of listFileName into oneFileName
put newFileName (oneFileName) into oneFileNameNew -- change file name
put url(folderDepart & oneFileName) into url(folderToCopy & oneFileNameNew) -- Copy
end repeat

set the defaultFolder to folderPathBis --Debug
put the files into msg --Debug
revSpeak “done”
end mouseUp

function newFileName oneFileName
-- Ici tout ce que vous voulez modifier sur le nom de fichier
delete char 1 to 6 of oneFileName -- début "file10"
put "file" & numero & oneFileName into oneFileNameNew --> 101xxxx
add 1 to numero
return oneFileNameNew
end newFileName

on alreadyExist
answer "The folder already exit, do you want to continu" with "Yes" or "Cancel"
if it is "Cancel" then exit alreadyExist
end alreadyExist

------------------------------------------------
put the number of lines of listFileName into numberOfLine

put url("binfile:/Users/alg/Desktop/aTest/" & oneFileName ) \
into url("binfile:/Users/alg/Desktop/aTestbis/" & aa)

--if the result is "can't open directory" then boom5
revCopyFile fileToCopy, folderPathBis
set the text of card field "working" to listFileName
show card field "working"

Écrit par : canaan 7 Mar 2017, 14:56

pourquoi faire compliqué quand on peut faire simple :
name changer, gratuit, simple, rapide et efficace
>> https://mrrsoftware.com/namechanger/

Écrit par : legallou 7 Mar 2017, 16:45

Par ce que NameChanger, à ma connaissance et je viens de le tester, va mettre la même date pour tous les fichiers du dossier.

cela ne marchera pas pour cet exemple d'un dossier avec les deux fichiers suivants :

Fichier 1 " test 30.12.2017" pour obtenir: "2017.12.30 test"

Fichier 2 " testAA 4.9.2017" pour obtenir: "2017.9.4 testAA"

là il faut pour chaque fichier récupérer la valeur du mois, du jour et de l'année pour mettre la même date en fichier de sortie.

Écrit par : Baradal 7 Mar 2017, 17:55

Le Finder tout simplement ?

Écrit par : Macbox 7 Mar 2017, 19:20

Citation (phmitch @ 7 Mar 2017, 13:22) *
Bonjour,

renommer par exemple: Fichier de test 30.12.2017 pour obtenir: 2017.12.30 Fichier test
Quel soft peut faire ça ?

D'avance merci


Difficile de t'aider sur base d'un seul exemple!
- Est-ce que tous les fichiers que tu dois traiter auront la même syntaxe de base? La même longueur?
- Combien de fichiers à traiter? Quelle est la fréquence de changement de date?
- Quel process génère le nom des fichiers?

S'il y a trop de variantes, à mon avis, seul un script complexe, développé pour ton usage, pourra tout faire en une seule fois.
Sinon, je crains qu'il ne faille travailler étape par étape avec des logiciels comme File Renamer, NameChanger, etc.

Dans notre esprit, et dans ton exemple, on pense que c'est simple:
- Déplacer la partie textuelle après la date
- Présenter la date suivant le monde année.mois.jour

Mais, la majorité des logiciels pour renommer (si pas tous) n'ont aucune intelligence artificielle pour pouvoir travailler de cette façon. Mais cela arrivera certainement, dans un avenir proche.

Écrit par : phmitch 8 Mar 2017, 14:59

Bonjour,

Un grand merci pour vos infos.

legallou: c'est exactement le problème ?

1200 fichiers nommés: nom + date(jj.mm.aaaa)

noms et dates= différents pour chaque fichier
Extension= .pdf

Il faudrait pourvoir faire une concaténation des données: date(aaaa.mm.jj) + 1 espace + nom du fichier(supprimer la date à la fin du nom)

Nom: Achat TimeCapsule 21.09.2016 -> 2016.09.21 Achat TimeCapsule

Les soft proposés sont incapables de faire cela; malheureusement...

Écrit par : Zeltron54 8 Mar 2017, 18:13

Bonjour phmitch

Si tous le fichiers ont bien la même structure (nom + " " + jj.mm.aaaa.extension) et qu'is sont tous dans un dossiers( même avec sous dossiers) et qu'il n'y ait pas d'autres fichiers que ceux à renommer, essai ce script.
Script à copier coller dans l'éditeur de script.
Il te demande de sélectionner le dossier à traiter et change les noms de TOUS les fichiers trouvés.

Un conseil essai avec une copie...
En espérant que cela te convienne.

tell application "Finder"
set chemin to choose folder with prompt "Sélectionnez le dossier contenant les fichiers à renommer"
my inspecter(chemin)
end tell

on inspecter(un_dossier)
tell application "Finder"
-- traitement des fichiers :
set les_fichiers to files of un_dossier
repeat with chaque_fichier in les_fichiers
-- traitement d'un fichier
tell application "Finder"

set nom to name of chaque_fichier --récupère le nom du fichier
set extens to document file nom in un_dossier --recupere l extension du fichier
set lextension to name extension of extens
set sauv to AppleScript's text item delimiters --sauvegarder la variable delimiteur
set AppleScript's text item delimiters to {"."} --récupère la partie avant le dernier "."
set elements to text items of nom
set nomcourt to (items 1 thru -2 of elements) as string
set ancien_nom to nomcourt


set AppleScript's text item delimiters to {" "} --récupère la partie avant le dernier " "
set elements to text items of ancien_nom
set nomcourt to (items 1 thru -2 of elements) as string
set debut to nomcourt
set findate to (items -1 thru -1 of elements) as string -- recupére apres le dernier " "

set AppleScript's text item delimiters to {"."} --récupère les elements de date
set elements to text items of findate
set lannee to (item 3 of elements) as string
set lemois to (item 2 of elements) as string
set lejour to (item 1 of elements) as string
set AppleScript's text item delimiters to sauv --restaurer la variable delimiteur

set nouveaunom to (lannee & "." & lemois & "." & lejour & " " & debut & "." & lextension) as string -- le nouveau nom

set name of file nom of un_dossier to nouveaunom

end tell
end repeat
-- traitement des dossiers :
set les_dossiers to folders of un_dossier
repeat with chaque_dossier in les_dossiers
-- traitement d'un dossier
my inspecter(chaque_dossier)
end repeat
end tell
end inspecter
tell application "Finder"
(display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell

Écrit par : legallou 9 Mar 2017, 10:34

@Zeltron54 Félicitation ton script est élégante et assez simple pour de l'AppleScript

@phmitch est-ce que le mois et le jour est toujours en deux lettres où tu peux avoir 4.5.2016

Écrit par : legallou 9 Mar 2017, 15:20

Ci-joint une version en LiveCode. Je n'ai pas utilisé la technologie des offsets, ce qui donne un code beaucoup plus bavard, mais aussi ce qui permet d'être indépendante du caractère de séparation du mois jour année dans la date. Il peut même être présent dans le titre.
J'ai fait juste un minimum de test car je dois m'absenter.

------------------------------------------------
9 mars 2017 - V1.0 Copyright Alain Le Gallou
Ce programme transforme le nom de fichier de "toto 01.04.2017" en "2017-04-01 toto"
ou nom de fichier de "toto 1.4.2017" en "2017-4-1 toto"
avec inversion des jours mois année de la date pour permettre un tri correct du Finder
Résultat par sécurité dans un dossier séparé xxBis
Ne traite que les fichiers de données .jpg .txt .... pas les applications
Fonctionne quel que soit le séparateur dans la date entre jours mois année
pour modification de la logique: C'est dans la function newFileName

Local nombreDeFichierFait
Local separateur = "_" -- Choix du caractère de séparation année, mois, jour

on mouseUp
put the defaultFolder into intitialDefaultFolder -- save
put 0 into nombreDeFichierFait -- Pour compter le nombre de fichiers exécutées
answer folder "Selectionnez le dossier à traiter dans Finder"
if the result is "cancel" then exit mouseUp
else put it into folderPath --> /Users/alg/Desktop/aWorking
set the defaultFolder to folderPath
put the files into listFileName -- The list of all fileName

-- Suppression des fichiers systèmes (.DS_Store, etc)
repeat with i = 1 to the number of lines of listFileName
If the first char of line i of listFileName is "."
then delete line i of listFileName
end repeat

-- Create the new folder container xxxBis
put folderPath &"Bis" into folderPathBis
if there is no folder folderPathBis
then create folder folderPathBis
else alreadyExist

-- Define the complet folder path for URL command
put "binfile:" & folderPath & slash into folderDepart -- "binfile:/Users/alg/Desktop/aTest/"
put "binfile:" & folderPath & "Bis" & slash into folderToCopy -- "binfile:/Users/alg/Desktop/aTestBis/"

-- Copy and change file name
repeat with i = 1 to the number of lines of listFileName
put line i of listFileName into oneFileName
put newFileName (oneFileName) into oneFileNameNew -- change file name
put url(folderDepart & oneFileName) into url(folderToCopy & oneFileNameNew) -- Copy the file
end repeat

set the defaultFolder to intitialDefaultFolder -- Restaure
revSpeak “Done”
answer nombreDeFichierFait & " was treated"
end mouseUp

function newFileName oneFileName
-- Ici tout ce que vous voulez modifier sur le nom de fichier
repeat with k = the number of chars of oneFileName down to 1 -- From last to first
if char k of oneFileName is "." then exit repeat
else delete char k of oneFileName -- <Elimination de .jpg .pdf
end repeat
delete last char of oneFileName -- le point de .jpg reste "nom 02.08.2017"
--année
put the number of chars of oneFileName into lastChar
put char lastChar-3 to lastChar of oneFileName into annee
delete char lastChar-4 to lastChar of oneFileName -- reste "nom 02.08" ou "nom 2.8"
--mois
put the number of chars of oneFileName into lastChar
if char lastChar-1 of oneFileName is in "0,1,2,3,4,5,6,7,8,9" then -- mois à 2 chiffres .08
put char lastChar-1 to lastChar of oneFileName into mois
delete char lastChar-2 to lastChar of oneFileName -- reste "nom 02"
else
put char lastChar of oneFileName into mois -- mois à 1 chiffre .8
delete char lastChar-1 to lastChar of oneFileName
end if
--jour
put the number of chars of oneFileName into lastChar
if char lastChar-1 of oneFileName is in "0,1,2,3,4,5,6,7,8,9" then --"nom 02"
put char lastChar-1 to lastChar of oneFileName into jour
delete char lastChar-1 to lastChar of oneFileName
else
put char lastChar of oneFileName into jour --"nom 2"
delete char lastChar of oneFileName
end if
delete last char of oneFileName -- le blanc
Put annee & separateur & mois & separateur & jour & " " &oneFileName into oneFileNameNew
put oneFileNameNew into msg -- debug
add 1 to nombreDeFichierFait
return oneFileNameNew
end newFileName

on alreadyExist
answer "The folder already exit, do you want to continu" with "Yes" or "Cancel"
if it is "Cancel" then exit alreadyExist
end alreadyExist

------------------------------------------------

Écrit par : legallou 9 Mar 2017, 18:30

Dans ton cas plus simple avec le point comme séparateur, les mois et jours sur deux caractères, pas de point dans le titre, et un blanc qui sépare le titre de la date l'extraction de la date devient beaucoup plus simple, car on peut utiliser les offsets comme dans l'exemple AppleScript.
Ci-joint un petit test a adapter dans la programmation précédente.

------------------------------------------------
-- si separateur "." et pas de point présent dans le titre
-- et mois, jour sur 2 caractères
-- L'utilisation des offsets est possible

Local separateur = "."

on mouseUp
put "toto 02.11.2017.jpg" into maDate

put partieGauche (maDate) into titreJour --"toto 02"
put partieDroite (maDate) into moisAn -- "11.2017.jpg"
--jour
put " " into separateur
put partieDroite (titreJour) into jour
--mois
put "." into separateur -- Retour au point comme séparateur
put partieGauche (moisAn) into mois
-- année
put partieDroite (moisAn) into reste -- "2017.jpg"
put partieGauche (reste) into année
put année & separateur & mois & separateur & jour into msg
end mouseUp

function partieGauche dataIn
put offset (separateur, dataIn) into offsetPosition
put char 1 to offsetPosition-1 of dataIn into partieGauche
return partieGauche
end partieGauche

function partieDroite dataIn
put the number of chars of dataIn into lastChar
put offset (separateur, dataIn) into offsetPosition
put char offsetPosition+1 to lastChar of dataIn into aDroite
return aDroite
end partieDroite

Écrit par : legallou 10 Mar 2017, 11:25

Comme il pleuvait, je suis resté au chaud et je vous ai fait le package complet à télécharger ici :
http://www.legallou.com/Mac/LiveCode/Date-Inversion/Date-Inversion.html

Rappel, LiveCode est gratuit pour une utilisation personnelle. livecode.org
Contactez-moi en privé si vous avez un souci. Email alain sur mon domaine legallou.com

Écrit par : phmitch 12 Mar 2017, 12:04

Bonjour legato,

Citation (legallou @ 9 Mar 2017, 10:34) *
@phmitch est-ce que le mois et le jour est toujours en deux lettres où tu peux avoir 4.5.2016

Non, la date est toujours sous la forme 00.00.0000

Encore un grand merci.

Je vais tester la solution au plus vite.

Écrit par : Zeltron54 14 Mar 2017, 20:32

@phmitch Bonsoir,

As-tu testé les différentes solutions ?
1- celle de legallou en livecode en #14 (perso un problème ça ne renomme pas dans les sous-dossier)
2 - la mienne en applescript en #10 (si problèmes, lesquels que l'on adapte à ton besoin)

Propulsé par Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)