Précédent   Forum des professionnels en informatique > Général Développement > Programmation système > Windows > Scripts/Batch
Scripts/Batch Forum d'entraide sur la programmation de scripts Batch et Powershell sous Windows.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/02/2012, 11h00   #1
Invité de passage
 
Homme
Inscription : février 2012
Messages : 8
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : février 2012
Messages : 8
Points : 0
Points : 0
Par défaut Un souci : Script batch permet de copier un fichier sur une machine Linux distant

Bonjour,

Je veux automatiser un script qui se lance tous les jours sur un serveur win pour récupérer un fichier sur une machine distante linux :

ce que j'ai fait :

Code :
psftp user@hostname -pw passwd -bc -b script.bat
le contenu de script.bat :
Code :
1
2
3
4
5
cd /répetoire_distant
ls -lart fichier.txt #--> ici ça bloque
ici je dois récupérer mon fichier.txt qui date j-1 ?
get fichier.txt
quit
#--> c'est ici l'erreur le psftp ne lit pas les options de la commande ls ? avez-vous une idée comment devrais-je faire contourner le pbm pour passer des commandes bash dans psftp?

Merci d'avance.
free_source est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 14h44   #2
Invité de passage
 
Homme
Inscription : février 2012
Messages : 8
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : février 2012
Messages : 8
Points : 0
Points : 0
j'ai pu contourner le pbm en deux commande plink et psftp et ça marche très bien :

1- j'ai crée un script shell sur ma machine distante (linux) et je l'exécute avec plink le résultat du script (le nom de fichier) est redirigé vers vers un fichier qui sera appelé par la commande psftp :

Code :
plink -ssh user@host -pw pwd bash -l -c './script.sh' >> fichier.src
la sortie est un nom de fichier à transférer qui sera concaténer dans fichier.src

Code :
1
2
3
cd /répetoire_distant
get nom_fichier
quit
2- maintenant je transfert mon fichier que j'ai récupéré dans 1 :

Code :
psftp user@hostname -pw passwd -bc -b fichier.src
Je n'arrive pas à affecter le résultat de la commande 1 dans le fichier.src d'une manière régulière en la remplaçant par une variable !!!
free_source est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 15h29   #3
Invité de passage
 
Homme
Inscription : février 2012
Messages : 8
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : février 2012
Messages : 8
Points : 0
Points : 0
J'avance doucement, c'est pas encore à 100% ..

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@echo off
set PSFTP_SERVER=xxxxx
set USER=xxxxx
set PWD=xxxxx
set FIC_BACK=fic_backup.txt
set psftpcmd=psftpcmd.txt

plink -ssh user@host -pw pwd bash -l -c './script.sh' >> fic_back

set FIC_BACK=fic_back

echo cd /data/Test/ >> %psftpcmd%
echo put %FIC_BACK% >> %psftpcmd%
echo quit >> %psftpcmd%
echo bye >> %psftpcmd%
psftp user@host -pw pwd -bc -b psftpcmd.txt
je bloque sur la redirection du resultat de la commande plink, comment puis-je l'affecter dans mon fichier psftpcmd.txt ? quelqu'un a une idée ou une astuce ? merci d'avance.
free_source est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 17h03   #4
Invité de passage
 
Homme
Inscription : février 2012
Messages : 8
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : février 2012
Messages : 8
Points : 0
Points : 0
Comment puis-je mettre cette commande dans une variable?

Code :
1
2
3
4
5
6
7
type C:\Programs\Test\fichier.txt
nom_fichier

set nom_fic='type C:\Programs\Test\\fichier.txt'

echo %nom_fic%
type C:\Programs\Test\fichier.txt
pourquoi ça n'affiche pas : nom_fichier ?
free_source est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/02/2012, 02h32   #5
Invité de passage
 
Homme
Inscription : février 2012
Messages : 8
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : février 2012
Messages : 8
Points : 0
Points : 0
j'ai trouvé la solution c'est très simple avec une boucle for

Code :
1
2
3
4
FOR /f "tokens=9 delims= " %nom_fic in ('type C:\Programs\Test\fichier.txt') do set %nom_fic

REM tokens permet de position ta chaine de caractaire ou N° de la colonne
REM delims perme de choisir ton delimiteur dans mon cas c'est un espace.
--> set %nom_fic= le nom de mon fichier

ça fonctionne et j'ai pu récupérer ma variable.

on pourra le faire autrement avec une recherche sur une chaîne de caractère :
Code :
FOR /f  %nom_fic in ('type C:\Programs\Test\fichier.txt ^|find "chaîne"') do set %nom_fic
free_source est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/02/2012, 11h23   #6
Membre Expert
 
Inscription : avril 2010
Messages : 973
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 973
Points : 1 198
Points : 1 198
Salut,

C'est quoi le contenu de "fichier.txt" ?
__________________
.
Assurément, je suis un consommateur militant, ma voix c'est mon porte-monnaie ...
C'est se faire entendre par les marques et enseignes peu scrupuleuses en n'achetant pas leurs produits.

P.-S. Dans le forum technique, vous êtes invité à noter ce message ■■■■■■■■■■■■■■■■▼
Et attention à ne pas tomber dans les abimes! Hein...
minnesota est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2012, 11h22   #7
Invité de passage
 
Homme
Inscription : février 2012
Messages : 8
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : février 2012
Messages : 8
Points : 0
Points : 0
Hello,

Le contenu de mon fichier est une liste des fichiers avec un suffixe de date genre :

Code :
1
2
3
4
type fichier
xxx_xxxx_xxxx_AAAAMMJJ_HHMMSS.log
...
...
à la base était une liste de fichier que j'ai récupéré à partir de la machine distante linux.

maintenant que j'ai la procédure de mon script batch comment puis-je l'automatisé avec une tache planifiée?
la commande at ? y a t-il d'autre commande plus efficace genre contab en unix?

Merci.
free_source est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2012, 15h41   #8
Membre Expert
 
Inscription : avril 2010
Messages : 973
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 973
Points : 1 198
Points : 1 198
Peux-tu en quelques mots écrire ce que tu souhaites faire ? Car comme tu vas dans tous les sens, c'est pas évident au premier abord de cerner tes attentions... Tu veux rapatrier localement des fichiers à partir d'un serveur FTP distant, c'est ça ?
__________________
.
Assurément, je suis un consommateur militant, ma voix c'est mon porte-monnaie ...
C'est se faire entendre par les marques et enseignes peu scrupuleuses en n'achetant pas leurs produits.

P.-S. Dans le forum technique, vous êtes invité à noter ce message ■■■■■■■■■■■■■■■■▼
Et attention à ne pas tomber dans les abimes! Hein...
minnesota est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2012, 17h16   #9
Invité de passage
 
Homme
Inscription : février 2012
Messages : 8
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : février 2012
Messages : 8
Points : 0
Points : 0
mon objectif est de faire un transfert sécurisé d'une liste de fichiers entre deux machine distante (serveur linux - serveur windows), je veux que mon script se lance chaque jour à partir de windows.
free_source est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2012, 21h56   #10
Membre Expert
 
Inscription : avril 2010
Messages : 973
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 973
Points : 1 198
Points : 1 198
Dans ce cas, pour récupérer ta liste de fichiers log il suffit de faire une requête LIST à ton serveur SFTP.

ta commande serait du genre

Code :
psftp tes_options... ton_script > liste_fichiers.txt
avec ton_script (que tu peux générer dynamiquement) ayant comme contenu :

Code :
1
2
ls "repertoire_distant/*.log"
quit
N'ayant pas de serveur sftp, je ne peux pas utiliser la commande psftp et je ne peux donc t'en dire plus sur ses spécificités.

Pour l'automatisation, tu peux utiliser le planificateur de tâche.
__________________
.
Assurément, je suis un consommateur militant, ma voix c'est mon porte-monnaie ...
C'est se faire entendre par les marques et enseignes peu scrupuleuses en n'achetant pas leurs produits.

P.-S. Dans le forum technique, vous êtes invité à noter ce message ■■■■■■■■■■■■■■■■▼
Et attention à ne pas tomber dans les abimes! Hein...
minnesota est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2012, 15h57   #11
Invité de passage
 
Homme
Inscription : février 2012
Messages : 8
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : février 2012
Messages : 8
Points : 0
Points : 0
Citation:
Envoyé par minnesota Voir le message
Dans ce cas, pour récupérer ta liste de fichiers log il suffit de faire une requête LIST à ton serveur SFTP.

ta commande serait du genre

Code :
psftp tes_options... ton_script > liste_fichiers.txt
avec ton_script (que tu peux générer dynamiquement) ayant comme contenu :

Code :
1
2
ls "repertoire_distant/*.log"
quit
N'ayant pas de serveur sftp, je ne peux pas utiliser la commande psftp et je ne peux donc t'en dire plus sur ses spécificités.

Pour l'automatisation, tu peux utiliser le planificateur de tâche.
au fait je le fait en deux étapes et ça marche, le soucis est comment faire une boucle pour Transférer les fichiers un par un.
j'ai essayé ce bout de code :

Code :
for /f "delims=" %%i in ('type fichier.txt') do set N_ligne=%%i& set /a compt+=1&
mais j'ai un retour d'erreur.
free_source est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2012, 16h26   #12
Membre Expert
 
Inscription : avril 2010
Messages : 973
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 973
Points : 1 198
Points : 1 198
C'est normal qu'il y ait une erreur étant donné que tu ne sais pas ce que tu fais. Une solution, comme tu disposes de ta liste de fichiers dans "fichier.txt", c'est de construire un script FTP avec la liste des fichiers à rapatrier, enfin je suppose, mais bon, comme tu utilises des fois "put", des fois "get", c'est à s'y perdre.

Quoi qu'il en soit, pour la piste que je te suggère, il suffit d'intégrer ces quelques lignes de code dans ton script cmd pour construire "psftpcmd.txt" avant de le transmettre pour traitement à psftp :

Code :
1
2
3
4
5
...
echo cd /data/test/>psftpcmd.txt
for /f "tokens=* usebackq"" %%i in ("fichier.txt") do echo.get "%%~i">>psftpcmd.txt
echo quit>>psftpcmd.txt
psftp ...
__________________
.
Assurément, je suis un consommateur militant, ma voix c'est mon porte-monnaie ...
C'est se faire entendre par les marques et enseignes peu scrupuleuses en n'achetant pas leurs produits.

P.-S. Dans le forum technique, vous êtes invité à noter ce message ■■■■■■■■■■■■■■■■▼
Et attention à ne pas tomber dans les abimes! Hein...
minnesota est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h21.


 
 
 
 
Partenaires

Hébergement Web