Rechercher : dans
Par :

Renommer un fichier avec date du jour

Dernière réponse le 29 oct 2009 à 09:49:25 Subira, le 18 nov 2002 à 17:07:05 
 Signaler ce message aux modérateurs

J'aimerai faire une copie d'un fichier sous windows en le renommant et lui rajouter la date du jour style :
Fichier d'origine : toto.txt
Fichier de destination : toto_AAAAMMJJ.txt

Comment puis je le faire par une procédure que je puisse automatiser ???

1

ipl, le 18 nov 2002 à 17:42:15

Bonsoir Subira, bonsoir à tous,

C'est faisable avec un fichier .bat si tu entres la date en paramètre.

Quelque chose du genre (fichier Sauve.bat) :
@echo off
rem Sauve.bat AAAAMMJJ pour sauvegarder les fichiers
if %1.==. goto mess
for %%V in (C:\dossier\*.*) do copy C:\dossier\%%v *_%1.*
goto fin
:mess
echo il est nécessaire d'entrer la date AAAAMMJJ
:fin

où %1 est le paramètre qui te sert à lancer le .bat :
Sauve 20021118

@12C4
Ipl

Répondre à ipl

2

subira, le 18 nov 2002 à 17:53:22

Merci ipl , j'ai une bonne piste , tu n'aurai pas une astuce pour récupérer la date du jour en paramètre dans la procédure ???
peut etre en amont faire un style echo date > date.txt

Et ensuite dans le fichier .bat faire :
sauve date.txt (ou sauve est le fichier .bat)

Sinon je teste !!!

Merci encore

Répondre à subira

3

ipl, le 18 nov 2002 à 18:28:56

Rebonsoir Subira,

Non, je ne vois pas d'astuce en Dos ou sous Windows car la commande Date affiche "La date actuelle est Lun 18/11/2002 mais il pourrait bien y avoir un petit programme capable de n'afficher que la date (sans / qui est un caractère interdit dans le nom du fichier)... dans les temps anciens, j'avais un programme basic qui me faisait çà (bien sûr, il y a moyen de le faire sous plein d'autres langages... n'importe quel programmeur sait faire... du reste, c'était le sujet d'un fil de discussion il y a environ 2 semaines sur CCM)

Si tu obtenais un tel programme -appelons le date.com- (un programme qui afficherait la date du jour sous la forme AAAAMMJJ) :
Date|Sauve
ferait le travail !

- je ne crois pas qu'il y ait une variable d'environnement qui nous donne la date sous cette forme
- on pourrait se débrouiller aussi bien avec un progr. capable d'écrire le résultat dans un fichier.
- je ne pense pas qu'il y ait de problème avec la longueur du nom (supérieure à 8) si le travail est fait dans une fenêtre Dos c'est à dire en Dos sous Windows.

@12C4
Ipl

Répondre à ipl

4

saad, le 19 nov 2002 à 09:43:50

Salut tous le monde,
C'est vrai pourquoi ne pas utiliser un petit prog qui ferait ça, moi je l'ai sauf que pour renommer, il ne prend que 8 caractères,
Faites moi signe si vous le voulez,

Salut et @+

Répondre à saad

5

SUBIRA, le 19 nov 2002 à 10:52:51

Bonjour à tous

Merci pour vos réponses éclairées.

Je suis preneur du petit programme qui fait cela meme si il il n'y a que 8 caractères !!!

JMS

Répondre à SUBIRA

7

saadmohamed, le 19 nov 2002 à 14:46:21

Re Salut,
Le prg je l'ai, je l'ai écris en Fox, il mesure 9704 octets, par contre il nécessite un run time un peu plus volumineux de 2 MO, je ne sais ou vous envoyer ces deux modules,

salut casablancais ensoleillé, @+

Répondre à saadmohamed

6

ofournier.cbd, le 19 nov 2002 à 11:06:15

Bonjour,

un sujet similaire a été traité dans PROGRAMMATION :
http://www.commentcamarche.org/forum/affich.php3?cat=3&ID=171991&page=2

Un autre post parlait aussi d'un petit exe ou com donnant la date du jour sous DOS mais je n'arrive pas à le retrouver ...

Olivier Fournier

Répondre à ofournier.cbd

8

ipl, le 19 nov 2002 à 17:03:24

Bonjour Olivier, bonjour à tous,

>Un autre post parlait aussi d'un petit exe ou com donnant la date
>du jour sous DOS mais je n'arrive pas à le retrouver ...
Ne daterait-il pas de la période 4-16 novembre ? :-(

@12C4
Ipl

Répondre à ipl

9

ipl, le 19 nov 2002 à 17:13:28

Bonjour saadmohamed,

>Re Salut,
>Le prg je l'ai, je l'ai écris en Fox, il mesure 9704 octets, par contre
>il nécessite un run time un peu plus volumineux de 2 MO, je ne
>sais ou vous envoyer ces deux modules,

Merci pour ta proposition !
Veux-tu bien m'envoyer les 2 modules à mon adresse e-mail ci-dessus (en remplaçant le 'à' par '@') ? merci !
Fox... n'est-ce pas un compatible dBase, mais avec compilateur -et runtime- ?

@12C4
Ipl

Répondre à ipl

10

ipl, le 19 nov 2002 à 17:17:29

Zut... je vieillis !

J'ai encore gwbasic.exe, dBase III+ mais je me rends compte que je ne sais même plus les utiliser (pour un petit utilitaire) !
Je vais quand même essayer ! nom de nom !

@12C4
Ipl

Répondre à ipl

11

ofournier.cbd, le 19 nov 2002 à 22:48:34

Bonsoir,

dans dBase la fonction qui retourne la date du système est date()
il y en a huit autres (jour, mois, année, ...) utilisables dans des variables. Attention au bug de l'an 2000 avec les années en court (2 derniers chiffres/caractères) : dBase renvoit 01 comme 1901 donc avant 2000 ... !

J'ai des applis .PRG en language dbase III+ et dBase IV (idem Clipper compilable), sous les DOS 3 à 6.22 (compatibles setver) d'un gros boulot SGBD que j'ai fait en 1991-92 utilisant toutes sortes de variables dates, de fonctions et de choix pour trouver (recherches séquentielles) des données précises à un moment précis dans des tas de bases intégrées.

Exemple :
* ============================ TRANDAT.PRG ===================================
* fait par OF 16/3/91 comme utilitaire pour JTOT, etc...
* Transformation d' une date (DATED2) en nom de fichier DATEFIC.(mem, dbf,...)
* syntaxe: 00_00_00.xxx macro: &DATEFIC (+".xxx")
* ============================================================================

***************** version num‚rique (intervalle d‚termin‚) *******************

public DATOBS && * premiŠre DATE d‚finie
TJ1=day(FDATOBS) && * jour (Nø de 1 … 31)
TM1=month(FDATOBS) && * mois ( 1 … 12)
TANN=str(year(FDATOBS)) && * ann‚e de 90 … ..)
TAN=right(TANN,2) && * CaractŠres
VTA1=val(TAN) && * Num‚rique
*------------------------ par exemple dans rechagr.prg (ajout -> f-ajout)
do case
case TJ1 < 5 .and. TM1=1 && * bornes
TJ2=15 && *********
TM2=12
VTA2=VTA1 - 1
case TJ1 < 5 .and. TM1 > 1
TJ2=15
TM2=TM1 - 1
VTA2=VTA1
case TJ1 > 5 .and. TJ1 <= 10 .and. TM1=1
************* etc....
endcase
CTA1=str(VTA2)
DATAC=ltrim(str(TJ2))+"/"+ltrim(str(TM2))+"/"+ltrim(CTA1)

DATAD=ctod(DATAC) && * nouvelle date limite

return

* *********************** version caractŠres (nom de fichier) ****************

*public DATED2,DATEFIC,DATEFICM && * par exemple jtot1.prg (ajout, e-ajout)

TJO=day(CDATED2)
TMO=month(CDATED2)
TANN=str(year(CDATED2))
TAN=right(TANN,2)

DATEFIC=ltrim(str(TJO))+chr(95)+ltrim(str(TMO))+chr(95)+ltrim(TAN)
* Forme du nom du fichier: 1_1_90 ou 10_10_90 (suffixe .MEM)

DATEFICM=DATEFIC+".MEM" && stock‚s dans S/r‚pertoire VAR-MEM
return
* ============================================================================

Plus vous intéresse ?

Olivier Fournier

Répondre à ofournier.cbd

12

ipl, le 20 nov 2002 à 00:27:32

Bonsoir Subira, Olivier, bonsoir à tous,

Merci Olivier ! ;-)

Subira... as-tu dBase III ou supérieur ?

@12C4
Ipl

Répondre à ipl

13

M&M, le 20 nov 2002 à 01:26:29

Je peux jouer aussi ?
Bon, bernadette, tui vas chercher sur http://www.rduff.com/ le petit programme Awk v3.20 et tu crées le fichier de programme awk ci dessous qu'on appellera Bonjour.awk (mais tu le raccourci comme tu veux et englobe dans une fichier bat si tu le désires).

#-----------------------------------------------------------­----------------
# FICHIER: Bonjour.AWK
# AUTEUR: M&M
# DESCRIPTION:
# Ce programme crée une copie d'un fichier donné en paramètre
# en ajoutant à son nom la date et l'heure et en conservant son extention
# SYNTAXE: awk -f bonjour.AWK monfichier.doc
# PREREQUIS:
# Le PC doit être configuré pour la date au format Belge ou français
# (Country=032 ou 033)
# OUTPUTS:
# il copie le fichier FICHIER.EXT sous le nom FICHIER_AAAAMMJJ.EXT
# Il crée et puis efface un fichier temporaire temp.tmp
# VERSION:
# 1.0 20/11/02 M&M Création
#---------------------------------------------------------------------------

BEGIN {
TMP="TEMP.TMP" # Fichier temporaire
IN_FILE = toupper(ARGV[1]) # ARGC-1] # Nom du fichier source
if (ARGC<2 || index(IN_FILE, ".") ==0 ) {
print "\nFichier à copier non defini ou extension manquante."
print "Usage: awk -f bonjour.awk fichier.doc"
Abort=1; exit }
else {
print "Pour avoir la date" > TMP
close (TMP)
system ("dir /4 "TMP" > " TMP)
# acquisition de la date de l'heure courante de win98
for (i=1;i<8;i++) {
getline < TMP
if (i> 4 && NF>=5) {
Date=$4; Time=$5
close(TMP)
break
}
}
if (i>7) {print "Erreur bonjour.awk: Date non trouvée."; Abort=1;exit}
}
match(IN_FILE,/\.[A-Za-z0-9\-_]+$/)
FILE= substr(IN_FILE,1,RSTART-1)
EXT=substr(IN_FILE,RSTART+1)
split(Date,DD,"\/")
Date=DD[3]DD[2]DD[1]
NEW=FILE"_"Date"."EXT
system ("copy "IN_FILE" "NEW)
exit
}
#---------------------------------------------------------------------------

Et voila, Subirou, je trouve que c'est horriblement compliqué par rapport aux outils des shells de unix. Laissons cet exercice aux jeunes, ofou !
 :,§_ ç _
(@)=(@)

Répondre à M&M

14

saadmohamed, le 20 nov 2002 à 08:58:31

Salut tous le monde,
ma vesrion à moi est la suivante:
*----------------------------------------------------------
parameter file

d = substr(dtoc(date()),7,4) + substr(dtoc(date()),4,2) + substr(dtoc(date()),1,2) + '.'

erase &d
rename &file to &d
return
*--------------------------------------
le prog recoit un fichier en paramétre est le renomme en date du jour,
PS: ce progr je l'ai compilé sous Fox 2.6, est j'en ai généré un EXE,
Je n'ai toujours pas d'@ mail pour vous l'envoyer,
Salut et @+

Répondre à saadmohamed

15

saadmohamed, le 20 nov 2002 à 09:08:16

Re Salut

Je réponds à O.Fournier, qu'il n'a jamais été question de bug au niveau de Dbase (on n'en fait que l'utilisation qu'on veut faire), il existe l'instruction SET CENTURY ON, qui permet d'afficher les années sur 4 car, ce qui permet de saisir 2000 au lieu de 00 pour 2000,
J'ai encore des appli Dbase qui tournent depuis la nuit des temps...
salut et @+

Répondre à saadmohamed

16

ofournier.cbd, le 20 nov 2002 à 11:11:18

Bonjour,

OUAH !!! Heureusement en plus qu'on est pas dans le forum PROGRAMMATION !

Nous v'là retournés dans la douce folie dBase d'Ashton Tate (et de l'énorme boulot de "La Commande Electronique") lesquels ont été descendus en flammes par le business fou (finis aussi les Pascals et turbos !).

Subira est servi(e) !

Revenons juste sur un petit détail pour saadmohamed :
1) bien sûr pour "set century on" d'entrée (config.db)
2 mais la fonction LUPDATE() (dernière date d'accés à une base *.DBF) me retourne à l'écran : 1901 1902, etc ... Aïe les incrémentations de ces dates par des variables pour gérer les bases et leur accés périodique !
3) Et puis comme un imbécile j'avais fait des dizaines d'applis avec les dates courtes : mon SGBD me renvoyait depuis avant la guerre de 14 ... depuis le 01/01/2000 !

Olivier Fournier

Répondre à ofournier.cbd

17

saadmohamed, le 20 nov 2002 à 14:14:38

Re Salut tous le monde,
C'est vrai je viens de vérifier, LUPDATE renvoie une information érronnée (1902), on pourra y pallier en utiliser la date système DOS, un Dir du répértoire, suivi d'un append from dans un fichier DBF dont le dessin d'enreg est le meme que celui de la ligne Dir, et voila, la date est récupéré dans 3 chanmps de donnees qu'on peut triturer comme on veut...

Salut casablancais ensoleillé, @+

Répondre à saadmohamed

18

SUBIRA, le 20 nov 2002 à 18:08:03

Bonsoir,

Je vous remercie tous, je vais essayer de trier dans toutes vos réponses , ce qui est sur c'est que je ne veux pas installer de run time sur ma machine !!!

Répondre à SUBIRA

19

M&M, le 20 nov 2002 à 22:14:12

Alors, adopte mon petit script Awk.exe qui pèse 47KB et tu fais un petit fichier DD.BAT qui contient cette ligne:

c:\util\awk -f c:\util\bonjour.awk %1

Tu mets tout dans un répertoire c:\util ou tout autre répertoire qui est dans le PATH et cela tourne quand tu tapes DD suivi tu nom du fichier à dater.

Petits bugs corrigés: j'ai utilisé l'instruction toupper qui fait que le résultat est en majuscule. (remplacer toupper(ARGV[1] par ARGV[1])
Autre bug corrigé: si l'extention contient un caractère accentué, il va canner. (remplacer [A-Za-z0-9\-_]+ par [^.]+ )
Dernier bug subsistant: si le nom contient le signe =, mon programme ne trouvera pas le fichier. (pas de parade)
Petit avantage: si le fichier contient plus d'un point dans le nom, il prend bien le dernier point comme séparateur d'extention
Il accepte aussi des noms long et des extentions plus longues que 3 caractères.
 :,§_ ç _
(@)=(@)

Répondre à M&M

20

patrice, le 20 nov 2002 à 22:57:01

Je ne sais pas si ma contribution peut apporter quelque chose mais comme je sais même pas écrire un petit programme, j'utilise un freeware (sous win98) qui s'appelle " the rename" extrèmement puissant qui peut modifier l'extension ou le nom de tous les fichiers d'un répertoire: on peut choisir date, heure, compteur incremental, ajouter ou renommer du texte, inverser minuscules majuscules, extraire des noms de fichiers MP3 (j'ai cru comprendre), enlever des espaces etc,renommer en fichiers courts; il y aurait aussi moyen de modifier et ajouter ses propres codes?
Voilà un exemple tiré de l'aide:
Situation: you want to rename a series of graphic files like

affiche98.JPG
back.jpg
bakgrunn.jpg
bunch1.jpg
ours.jpg
SAUT.jpg
topbkg.jpg

to a series of names like img00001.jpg, img00002.jpg, img00003.jpg. You also want the extension to be in lower case.

Choose Modify Prefix in the Prefix frame, click on tab Add a counter, leave beginning value and step at their original values and modify digits to 5. Then, click on Text tab and choose Replace with text and type img. In Extension frame, scroll to Lower case. Select files and click on Start. That's all!

This is why I made this program, to create this kind of file name.

Cela parait compliqué mais très simple à l'usage. L'auteur est Hervé Thouzard mais son site a déménagé. Il mérite d'être connu, en plus c'est gratuit et distribuable; j'ai du récupérer ça dans Freelog peut-être?

Patrice

Répondre à patrice

21

JM DEWALQUE, le 20 jun 2005 à 21:20:07

Bonjour,

Pour la date rendue pas LUPDATE, il faut ajouter l'instruction suivante en début de programme :

SET EPOCH TO 1960 (ou toute autre date charnière)

Cela indique à Clipper que toute date du style "18/05/04" devra être interprétée comme faisant partie de l'année 2004 et non 1904 puisque EPOCH est mis à 1960. Par contre, une date dont le numéro de l'année en 2 positions (xx) est antérieure à "60" sera considérée comme "19xx" et non pas "20xx".

Le mieux est d'utiliser :
SET CENTURY ON
ce qui force le système à travailler avec l'année exprimée en 4 chiffres. Là, il n'y a plus d'ambiguité pour déterminer le siècle par rapport à une année exprimée en 2 chiffres.

Répondre à JM DEWALQUE