Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

besoin d'un coup de pouce pour écrire un script

12 réponses
Avatar
Anonyme
Bonjour,

Je cherche à écrire un script qui va télécharger avec wget 3 fichiers
(wget http://url/file ) et qui me les sauvegarde dans un repertoire en
suffixant la date du jour au nom du fichier.
j'aimerai qu'il supprime le ou les fichier (s) dont la date est la plus
anciènne de manière à n'en conserver que les 10 fichiers les plus récents.

pour l'automatisation de son execution je me débrouillerai avec le
planificateur de taches.

Je ne connais que quelques petit truc en wsh mais pas assez pour faire ca.

Merci beaucoup

10 réponses

1 2
Avatar
Méta-MCI
Bonjour !

Voici un petit batch, qui :
- liste (DIR) les fichiers (sauf les directories)
- par ordre de dates (de création) décroissantes
- compte les fichiers
- effectue un traitement différent (ici juste l'affichage), selon que le
compteur est "inférieur ou égal à 10", ou "supérieur à 10".


Voilà le contenu du script :


::traitement sur les 10 fichiers les plus récents, et les autres

@echo off

setlocal
set nb=0
for /F "usebackq tokens=1-8" %%a in (`dir /T:C /O:-D /A:-D /B`) do (call
:SUB %%a %%b %%c %%d %%e %%f %%g %%h)
endlocal
goto :EOF

:SUB
set /Anb+=1
if /I %nb% LEQ 10 echo traite 10 premiers: %*
if /I %nb% GTR 10 echo traite les autres : %*
goto :EOF


Note : le caractère, et les espaces au début, c'est pour contourner un
problème d'affichage avec MesNews.

@+

MCI
Avatar
Michel Claveau
Le même, avec MesNews (pour un test) :

::traitement sur les 10 fichiers les plus récents, et les autres

@echo off

setlocal
set nb=0
for /F "usebackq tokens=1-8" %%a in (`dir /T:C /O:-D /A:-D /B`) do
(call :SUB %%a %%b %%c %%d %%e %%f %%g %%h)
endlocal
goto :EOF

:SUB
set /Anb+=1
if /I %nb% LEQ 10 echo traite 10 premiers: %*
if /I %nb% GTR 10 echo traite les autres : %*
goto :EOF

--
@-salutations

Michel Claveau
Avatar
Méta-MCI
Re !

Et une macro en PeJBshell, avant que les prosélytes de PowerShell ne se
réveillent :

Traite les fichiers, sauf les 10 plus récents
.pyt
trtDOS('dir /T:C /O:-D /A:-D /B')
lf=lbufferout(-1)
for fichier in lf[:10]: print fichier
.dos

(Attention, la première ligne est TOUJOURS un titre ou un commentaire)
Cette macro est basée sur le même principe que précédemment : DIR (du DOS),
trié, avec utilisation du résultat.


On pourrait faire un peu plus court (mais moins lisible) :
Traite les fichiers, sauf les 10 plus récents
.pyt
trtDOS('dir /T:C /O:-D /A:-D /B')
for fichier in lbufferout(-1)[:10]: print fichier
.dos



@+

MCI
Avatar
Gilles LAURENT
"Anonyme" a écrit
dans le message
de news:
| Bonjour,

Bonjour,

| Je cherche à écrire un script qui va télécharger
avec wget 3
| fichiers (wget http://url/file ) et qui me les sauvegarde dans un
| repertoire en suffixant la date du jour au nom du fichier.
| j'aimerai qu'il supprime le ou les fichier (s) dont la date est la
| plus anciènne de manière à n'en conserver que les 10
fichiers les
| plus récents.

En complément de la réponse de Michel, ci-dessous le script batch
"copyHttp.cmd" permettant de réaliser les opérations
demandées.

+++ Pré requis
1- créez le dossier de reception (par exemple C:Transfert)
2- déposez le script copyHttp.cmd dans ce dossier
3- l'outil wget doit être dans le path

+++ Syntaxe
copyHttp url file1 file2 file3

Par exemple :
C:Transfert>copyHttp http://site.intra f1.txt "f 2.txt" f3.txt

Note : Les fichiers composés de noms longs doivent être
spécifiés entre
guillemets.

-- Coupez ici : copyHttp.cmd --

@echo off
setlocal
pushd %~dp0

:: construction des filtres de purge
set f1=dir /b /o-n /a-d
set f2=find /v "%~n0%~x0"

:: construction de la date du jour au format aaaammjj
for /f "tokens=1-3 delims=/" %%i in ('echo %date%') do (
set fmtdate=%%k%%j%%i
)

:: téléchargement des tois fichiers spécifiés
:: les fichiers sont sauvegardés dans le dossier courant
wget "%1/%~2" -O"%fmtdate%_%~2"
wget "%1/%~3" -O"%fmtdate%_%~3"
wget "%1/%~4" -O"%fmtdate%_%~4"

:: seuls les dix fichiers les plus récents sont conservés
for /f "skip tokens=*" %%i in ('%f1% ^| %f2%') do (
echo [ ] deleting "%%i" ...
del "%%i"
)

popd
endlocal

-- Coupez ici : copyHttp.cmd --

--
Gilles LAURENT
Me contacter : http://cerbermail.com/?zoTY7ZkLcD
Avatar
JLuc
Bonjour Gilles LAURENT

Une petite question à laquelle je n'ai pas (encore) trouvé de réponse :
Où peut on trouver des références sur les commandes utilsées dans ces
script ? Je connais assez le DOS et ses commandes, mais la plupart des
commandes utilisées me reste inconnues. Si tu pouvais me donner des
liens pour mieux comprendre et apprendre, je t'en serais reconnaissant
JLuc

-- Coupez ici : copyHttp.cmd --

@echo off
setlocal
pushd %~dp0

construction des filtres de purge
set f1=dir /b /o-n /a-d


set f2=find /v "%~n0%~x0"

construction de la date du jour au format aaaammjj
for /f "tokens=1-3 delims=/" %%i in ('echo %date%') do (


set fmtdate=%%k%%j%%i
)

téléchargement des tois fichiers spécifiés
les fichiers sont sauvegardés dans le dossier courant
wget "%1/%~2" -O"%fmtdate%_%~2"


wget "%1/%~3" -O"%fmtdate%_%~3"
wget "%1/%~4" -O"%fmtdate%_%~4"

seuls les dix fichiers les plus récents sont conservés
for /f "skip tokens=*" %%i in ('%f1% ^| %f2%') do (


echo [ ] deleting "%%i" ...
del "%%i"
)

popd
endlocal

-- Coupez ici : copyHttp.cmd --


--
JLuc

Pensez a regarder ces sites très bien fait, ce sont des mines de trucs
et astuces !
http://www.excelabo.net
http://jacxl.free.fr/mpfe/trombino.html
http://dj.joss.free.fr/netiquet.htm



Avatar
Michel Claveau
Re !

Dans tous les cas, ne pas hésiter à encadrer les noms de fichiers à
traiter avec des guillemets, pour éviter les problèmes d'espaces dans
les sus-dits nom de fichiers.

--
@-salutations

Michel Claveau
Avatar
Michel Claveau
Bonsoir !

Sur le bureau, appuyer sur [F1], puis rechercher "a-z commandes", et
choisir "Références A-Z etc."

--
@-salutations

Michel Claveau
Avatar
Gilles LAURENT
"JLuc" a écrit dans le message de
news:
| Bonjour Gilles LAURENT

Bonsoir,
Gilles suffira ;-)

| Une petite question à laquelle je n'ai pas (encore) trouvé de réponse
| : Où peut on trouver des références sur les commandes utilsées dans
| ces script ? Je connais assez le DOS et ses commandes, mais la
| plupart des commandes utilisées me reste inconnues. Si tu pouvais me
| donner des liens pour mieux comprendre et apprendre, je t'en serais
| reconnaissant JLuc

Toutes les commandes batch cmd sont largement documentées :
1- ouvrir une invite de commandes (cmd.exe)
2- une fois au prompt, entrez la commande 'help'
=> toutes les commandes de l'interpréteur cmd.exe vont s'afficher
3- pour chaque commande, entrer /? (par exemple 'for /?')
=> la fonction, la syntaxe et tous les arguments sont documentés
4- un peu d'huile de coude pour comprendre et tester toutes les
commandes ;-)

Cependant, je vous invite à découvrir le nouveau shell Microsoft Windows
PowerShell consultable à cette adresse :
http://www.microsoft.com/windowsserver2003/technologies/management/powershell/default.mspx

Ainsi que le blog de Jacques Barathon [MS] sur Windows PowerShell :
http://janel.spaces.msn.com/blog

Je pense qu'il est plus judicieux d'inverstir du temps dans Powershell
que dans le batch cmd. En fait, c'est exactement ce que je suis en train
de faire :-) Le batch cmd a beaucoup de limites et pour parvenir au
résultat souhaité il est souvent nécessaire de "bidouiller" avec
plusieurs commandes. Normalement, je code en Perl pour contourner les
limitation du batch. Maintenant que Powershell est annoncé sur nos
plateformes, je peux vous assurer que c'est le langage de choix !

--
Gilles LAURENT
Me contacter : http://cerbermail.com/?zoTY7ZkLcD
Avatar
Michel Claveau
Bonsoir !

AMHA, c'est toujours intéressant de connaître les commandes dispo en
"invite de commandes", car elles seront aussi utilisables avec
Power-Shell.

...avec PowerShell, mais aussi avec PeJBshell, qui est au moins aussi
puissant. Voir : http://ponx.org/ponx/pejbshell.htm

--
@-salutations

Michel Claveau
Avatar
JLuc
Merci à toi et à Michel Claveau pour ces infos. Je m'y mets dès que
possible
Bonne soirée

Gilles LAURENT a formulé ce dimanche :
"JLuc" a écrit dans le message de
news:
Bonjour Gilles LAURENT


Bonsoir,
Gilles suffira ;-)

Une petite question à laquelle je n'ai pas (encore) trouvé de réponse
Où peut on trouver des références sur les commandes utilsées dans
ces script ? Je connais assez le DOS et ses commandes, mais la

plupart des commandes utilisées me reste inconnues. Si tu pouvais me
donner des liens pour mieux comprendre et apprendre, je t'en serais
reconnaissant JLuc


Toutes les commandes batch cmd sont largement documentées :
1- ouvrir une invite de commandes (cmd.exe)
2- une fois au prompt, entrez la commande 'help'
=> toutes les commandes de l'interpréteur cmd.exe vont s'afficher
3- pour chaque commande, entrer /? (par exemple 'for /?')
=> la fonction, la syntaxe et tous les arguments sont documentés
4- un peu d'huile de coude pour comprendre et tester toutes les
commandes ;-)

Cependant, je vous invite à découvrir le nouveau shell Microsoft Windows
PowerShell consultable à cette adresse :
http://www.microsoft.com/windowsserver2003/technologies/management/powershell/default.mspx

Ainsi que le blog de Jacques Barathon [MS] sur Windows PowerShell :
http://janel.spaces.msn.com/blog

Je pense qu'il est plus judicieux d'inverstir du temps dans Powershell
que dans le batch cmd. En fait, c'est exactement ce que je suis en train
de faire :-) Le batch cmd a beaucoup de limites et pour parvenir au
résultat souhaité il est souvent nécessaire de "bidouiller" avec
plusieurs commandes. Normalement, je code en Perl pour contourner les
limitation du batch. Maintenant que Powershell est annoncé sur nos
plateformes, je peux vous assurer que c'est le langage de choix !


--
JLuc

Pensez a regarder ces sites très bien fait, ce sont des mines de trucs
et astuces !
http://www.excelabo.net
http://jacxl.free.fr/mpfe/trombino.html
http://dj.joss.free.fr/netiquet.htm



1 2