Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2871 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [Batch] Comment lire la 7e ligne d'un fichier ? [Résolu]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Batch] Comment lire la 7e ligne d'un fichier ? [Résolu]

n°1525815
sieurcoug
Posté le 08-03-2007 à 14:28:14  profilanswer
 

Bonjour,
 
Je cherche à extraire le chemin où sont stockés mes mails Thunderbird afin de faire un backup.
 
Il faut donc pour cela lire le fichier C:\Documents and Settings\COUILLARD-12002\Application Data\Thunderbird\profiles.ini[/u]
Et à la 7e ligne il y a Path=X:\Thunderbird\Profiles\6cnzn7ci.défaut qui change parfois.
 
Savez-vous comment récupérer cette donnée "X:\Thunderbird\Profiles\6cnzn7ci.défaut" en batch Windows ?
 
 
 
Mon profiles.ini :

[General]
StartWithLastProfile=0
 
[Profile0]
Name=12002
IsRelative=0
Path=X:\Thunderbird\Profiles\6cnzn7ci.défaut
Default=1


Message édité par sieurcoug le 09-03-2007 à 14:53:17
mood
Publicité
Posté le 08-03-2007 à 14:28:14  profilanswer
 

n°1525854
webding
Posté le 08-03-2007 à 15:15:52  profilanswer
 

Avec un boucle for

Message cité 1 fois
Message édité par webding le 08-03-2007 à 15:19:39
n°1525859
sieurcoug
Posté le 08-03-2007 à 15:26:46  profilanswer
 

webding a écrit :

Avec un boucle for


Oui ca me va  :)  
Mais comment l'écrire ?

n°1525866
webding
Posté le 08-03-2007 à 15:33:16  profilanswer
 

for /f "skip=6 tokens=2 delims==" %%i in ('type y.txt') do echo %%i & goto suit
:suit
 
tu remplace y.txt par le chemin du fichier.ini

n°1525868
webding
Posté le 08-03-2007 à 15:34:54  profilanswer
 

Mais au fait que veut tu faire avec ce script

n°1525869
blastkille​r
Posté le 08-03-2007 à 15:34:56  profilanswer
 

@echo off
for /f "delims=" %%a in ('more/e +6 ^< profiles.ini') do set "ligne=%%a"
echo %ligne%
pause

n°1525872
webding
Posté le 08-03-2007 à 15:37:24  profilanswer
 

Je ne connaissai pas la commane more/e, elle est propre a xp ?

n°1525883
blastkille​r
Posté le 08-03-2007 à 15:47:24  profilanswer
 

Hum, j'en sais rien ^^
J'ai toujours tourné sous XP pro quand je codais en batch donc j'peux pas trop te répondre.

n°1525887
webding
Posté le 08-03-2007 à 15:49:44  profilanswer
 

Je vien de la trouver sous xp,
 
Tu n'a pas fini ta boucle

n°1525889
sieurcoug
Posté le 08-03-2007 à 15:51:38  profilanswer
 

Génial Webding !
J'ai fait :

for /f "skip=6 tokens=2 delims==" %%i in ('type "%APPDATA%\Thunderbird\profiles.ini"') do echo %%i & goto suit
:suit


Ca marche nickel.
 
L'autre commande de Blastkiller marchait presque, elle m'affichait la dernière ligne "Default=1", même avec more/e +5.
 
Merci beaucoup !
Ca m'est utile pour faire un batch de sauvegarde d'un (petit) parc de postes avec Xcopy.
Des fois les utilisateurs mettent leurs mails ailleurs que dans le répertoires par défaut.

Encore une question (j'abuse : ) : Pourquoi le code suivant m'affiche 1 ?

Code :
  1. for /f "skip=6 tokens=2 delims==" %%i in ('type "%APPDATA%\Thunderbird\profiles.ini"') do set MailsThunderbird=%%i
  2. echo %MailsThunderbird%


Comment je peut manipuler la valeur récupérée après ?

mood
Publicité
Posté le 08-03-2007 à 15:51:38  profilanswer
 

n°1525894
webding
Posté le 08-03-2007 à 15:55:01  profilanswer
 

Essaye comme ça:
for /f "skip=6 tokens=2 delims==" %%i in ('type "%APPDATA%\Thunderbird\profiles.ini"') do set MailsThunderbird=%%i & goto suit
:suit
      echo %MailsThunderbird%

n°1525902
webding
Posté le 08-03-2007 à 16:02:28  profilanswer
 

Comment ça manipuler la valeur récupérée ?

n°1525903
blastkille​r
Posté le 08-03-2007 à 16:03:32  profilanswer
 

woups, autant pour moi :

 

@echo off
for /f "delims=" %%a in ('more/e +6 ^< profiles.ini') do if not defined ligne set "ligne=%%a"
set ligne=%ligne:~5%
echo %ligne%
pause

 

sa marche mieux ! ;)


Message édité par blastkiller le 08-03-2007 à 16:07:07
n°1525904
sieurcoug
Posté le 08-03-2007 à 16:05:00  profilanswer
 

Super, Merci Webding !!!
Ca marche super.
Je vais pouvoir faire mes Xcopy :

Code :
  1. xcopy "%APPDATA%\Thunderbird" "%RepertoireBackup%\%USERNAME%\Application Data\Thunderbird\" /V /F /E /H /R /Y /I /D /K /Z

n°1526234
sieurcoug
Posté le 09-03-2007 à 10:37:55  profilanswer
 

Le fait de connaitre le chemin ca me permet aussi de tester la présence de parent.lock.
Ce fichier indique que Thunderbird est en cours d'exécution et il fait échouer mon Xcopy.
Idem pour Firefox.
 
Il me reste un petit souci : il y a un espace à la fin de la chaîne.
Comment l'enlever ?

n°1526249
webding
Posté le 09-03-2007 à 10:47:25  profilanswer
 

La je ne sais pas

n°1526267
sieurcoug
Posté le 09-03-2007 à 11:15:03  profilanswer
 

J'ai trouvé ! Ici : http://www.experts-exchange.com/OS [...] d=20816600
 

Code :
  1. set RepMailsThunderbird=%RepMailsThunderbird:~,-1%

n°1526450
sieurcoug
Posté le 09-03-2007 à 14:52:07  profilanswer
 

Ca y est ! J'ai pu faire ce que je voulais : sauvegarder mes profils Firefox et Thunderbird, peu importe où ils sont situés (du moment qu'ils sont accessibles par l'explorateur, naturellement).
Il suffit de copier les lignes ci-dessous dans un fichier .bat à lancer comme un exécutable.
C'est hyper simple à utiliser, aucune installation de logiciels de backup à faire, et c'est méga rapide !!
Voici mon code, si ca peut vous servir :
(et merci à vous pour l'aide)
 

@echo off
if "%os%" =="Windows_NT" color
title Sauvegarde des donnees de %USERNAME%
 
set RepertoireBackup="ou_on_veut"
 
echo.
echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
echo º Sauvegarde vers : %RepertoireBackup%
echo º Pour l'utilisateur %USERNAME%
echo º - L'affichage devient bleu si erreur -
echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
echo.
 
echo ÍÍÍÍÍÍÍÍÍÍ Thunderbird ÍÍÍÍÍÍÍÍÍÍ
xcopy "%APPDATA%\Thunderbird" "%RepertoireBackup%\%USERNAME%\Application Data\Thunderbird\" /V /F /H /R /Y /I /D /K /Z
if errorlevel 2 goto abort
if errorlevel 4 goto lowmemory
if errorlevel 5 goto writeerror
REM IsRelative = 1 ?
for /f "skip=5 tokens=2 delims==" %%i in ('type "%APPDATA%\Thunderbird\profiles.ini"') do set IsRelativeThunderbird=%%i & goto suitMailsThunderbird1
:suitMailsThunderbird1
for /f "skip=6 tokens=2 delims==" %%i in ('type "%APPDATA%\Thunderbird\profiles.ini"') do set RepMailsThunderbird=%%i & goto suitMailsThunderbird2
:suitMailsThunderbird2
REM on enleve le dernier caractère (un espace)
set RepMailsThunderbird=%RepMailsThunderbird:~,-1%
REM on met des anti-slashes à la place des slahes
set RepMailsThunderbird=%RepMailsThunderbird:/=\%
 
REM on créé l'arborescence complète de destination
if %IsRelativeThunderbird%==1 set RepBackupMailsThunderbird=%USERNAME%\Application Data\Thunderbird\%RepMailsThunderbird%
REM si le chemin est relatif on ajoute l'arborescence
if %IsRelativeThunderbird%==1 set RepMailsThunderbird=%APPDATA%\Thunderbird\%RepMailsThunderbird%
if %IsRelativeThunderbird%==0 set RepBackupMailsThunderbird=%RepMailsThunderbird::=_%
 
if exist "%RepMailsThunderbird%\parent.lock" call:afficher_message "Fermez Thuderbird !"
if not exist "%RepMailsThunderbird%\parent.lock" (
 if exist %RepMailsThunderbird% xcopy %RepMailsThunderbird% "%RepertoireBackup%\%RepBackupMailsThunderbird%\" /V /F /E /H /R /Y /I /D /K /Z
)
if errorlevel 2 goto abort
if errorlevel 4 goto lowmemory
if errorlevel 5 goto writeerror
 
 
echo ÍÍÍÍÍÍÍÍÍÍ Firefox ÍÍÍÍÍÍÍÍÍÍ
xcopy "%APPDATA%\Mozilla\Firefox" "%RepertoireBackup%\%USERNAME%\Application Data\Mozilla\Firefox\" /V /F /H /R /Y /I /D /K /Z
for /f "skip=5 tokens=2 delims==" %%i in ('type "%APPDATA%\Mozilla\Firefox\profiles.ini"') do set IsRelativeFirefox=%%i & goto suitFirefox1
:suitFirefox1
for /f "skip=6 tokens=2 delims==" %%i in ('type "%APPDATA%\Mozilla\Firefox\profiles.ini"') do set RepFirefox=%%i & goto suitFirefox2
:suitFirefox2
REM on enleve le dernier caractère (un espace)
set RepFirefox=%RepFirefox:~,-1%
REM on met des anti-slashes à la place des slahes
set RepFirefox=%RepFirefox:/=\%
 
REM on créé l'arborescence complète de destination
if %IsRelativeFirefox%==1 set RepBackupFirefox=%USERNAME%\Application Data\Mozilla\Firefox\%RepFirefox%
if %IsRelativeFirefox%==1 set RepFirefox=%APPDATA%\Mozilla\Firefox\%RepFirefox%
if %IsRelativeFirefox%==0 set RepBackupFirefox=%RepFirefox::=_%
 
if exist "%RepFirefox%\parent.lock" call:afficher_message "Fermez Firefox !"
if not exist "%RepFirefox%\parent.lock" (
 if exist "%RepFirefox%" xcopy "%RepFirefox%" "%RepertoireBackup%\%RepBackupFirefox%\" /V /F /E /H /R /Y /I /D /K /Z
)
if errorlevel 2 goto abort
if errorlevel 4 goto lowmemory
if errorlevel 5 goto writeerror
 
 
:abort
REM Code 2 : L'utilisateur a appuyé sur CTRL+C pour arrêter l'exécution de la commande xcopy.  
echo Fichier verrouillé ou vous avez appuyé sur CTRL+C pour mettre fin à la copie.
echo %Date%;%USERNAME%;%TempsDebut%;%Time%;ERREUR-Accès à un fichier vérrouillé (lock Firefox/Thunderbird ?) ou Annulé par l'utilisateur >> %FichierLog%
REM echo. >> %FichierLog%
goto exit
 
:lowmemory
REM Code 4 : Une erreur d'initialisation s'est produite. La mémoire ou l'espace disque est insuffisant, ou vous avez entré un nom de lecteur ou une syntaxe non valide sur la ligne de commandes.
echo Mémoire insuffisante pour copier les fichiers ou
echo lecteur ou syntaxe de ligne de commandes non valide.
echo %Date%;%USERNAME%;%TempsDebut%;%Time%;ERREUR-Espace disque insuffisant >> %FichierLog%
REM echo. >> %FichierLog%
goto exit
 
:writeerror
REM Code 5 : Une erreur d'écriture s'est produite sur le disque.  
echo %Date%;%USERNAME%;%TempsDebut%;%Time%;ERREUR d'écriture sur le disque >> %FichierLog%
REM echo. >> %FichierLog%
goto exit
 
:afficher_message
if "%os%" =="Windows_NT" color 1F
echo.
echo -----------------------------------
echo %1
echo -----------------------------------
echo.
REM Sortie de la fonction  
goto:EOF  
 
:exit


Message édité par sieurcoug le 09-03-2007 à 15:24:49
n°1623136
Coolnut
Posté le 12-10-2007 à 17:19:14  profilanswer
 

Code :
  1. for /f "delims=" %%i in ('type fichier.txt') do set VrLgn=%%i& set /a compt+=1& call :testNumbLgn
  2. goto :oef
  3. :testNumbLgn
  4. if %compt% equ 7 echo %VrLgn%
  5. goto :oef


Message édité par Coolnut le 12-10-2007 à 17:19:23
n°2264940
pierre059
Posté le 28-08-2015 à 12:07:06  profilanswer
 

ça marche mieux comme ça :
 

Code :
  1. @echo off
  2. set compt=0
  3.     for /f "delims=" %%i in ('type A_eteindre.txt') do set VrLgn=%%i & set /a compt+=1 & call :testNumbLgn
  4.     goto :oef
  5.     :testNumbLgn
  6.     if %compt% equ 7 echo %VrLgn%
  7.     goto :oef
  8. :oef


Message édité par pierre059 le 28-08-2015 à 12:07:33

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [Batch] Comment lire la 7e ligne d'un fichier ? [Résolu]

 

Sujets relatifs
[Résolu] Connexion à une base de données mySQL via ODBCSélection ligne dans lignes filtrées
Problème avec un fichier externe pour mes variables[résolu] C++: double : limitation à 15 digits - comment aller au dela?
Suggestion: Ajouter un "Copier et renommez fichier existant en .old"D'autre forum sur le batch ? (+ quelques questions)
passage d'une fonction comme argument pour une autre fonction (Résolu)Lire un fichier txt ligne par ligne
Plus de sujets relatifs à : [Batch] Comment lire la 7e ligne d'un fichier ? [Résolu]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR