Se connecter avec
S'enregistrer | Connectez-vous

[Batch] Problème espace ligne d'un fichier

Dernière réponse : dans Programmation

Salut,

J'ai un fichier "repertoire1.txt" qui contient sur la 1ère ligne le nom d'un répertoire. Je fais un traitement qui sera détaillé dans la suite de mon explication, le fichier de sortie est "rep1.txt". Ce fichier est le suivant :

" klbackup 2006-06-09 # 16-19-01"

Le problème comme vous le voyez c'est qu'il y a un espace sur la 1ère ligne avant le l'information voulue. Je veux absolument récupérer cette info mais sans l'espace avant.

j'utilise cette synthaxe suivante : "findstr [kl-$] repertoire1.txt > rep1.txt"

En croyant que sa fera l'extraction de la 1ère ligne du fichier en commencant par la chaîne de caractères qui commence par "kl" de "klbackup" jusqu'à la fin de la chaîne ($). Mais malheureusement l'espace reste au final avec la chaîne.

Merci de m'aider
Lassé par la pub ? Créez un compte
Expert Programmation

Ben qu'appelles-tu une commande en batch ?

S'il s'agit d'une des pauvres commandes en ligne de Windows, je n'ai rien à te proposer.

Si tu peux disposer de HEAD.EXE et de SED.EXE, disponibles dans UnxUtils (par exemple en les copiant dans un dossier présent dans la variable PATH, ou en ajoutant à la variable PATH le dossier où tu les auras copiés) tu recopies simplement la ligne ci-dessus proposée dans un fichier .BAT.

tu ne sais pas par hasard ajouter des guillemets dans une ligne d'un fichier. Dans mon fichier j'ai ca :

"klbackup 2006-06-09 # 16-19-01"

et je voudrais que ca fasse "klbackup" "2006-06-09" "#" "16-19-01"

quels commande utilisé afin de réaliser ca ??
Expert Programmation

Meuh non, le contenu du fichier n'est pas altéré.
Pour ça, il faudrait faire une redirection :
type rep1.txt | sed "s/...../...../" > rep1_guillemets.txt


(en voyant ton premier post, j'ai pensé que tu savais)
Expert Programmation

bomec23 a dit :
tu ne sais pas par hasard ajouter des guillemets dans une ligne d'un fichier. Dans mon fichier j'ai ca :

"klbackup 2006-06-09 # 16-19-01"

et je voudrais que ca fasse "klbackup" "2006-06-09" "#" "16-19-01"

quels commande utilisé afin de réaliser ca ??
ah moi ce que j'aurai fait ...
  1. @echo off
  2. set TEMPORAIRE=%TMP%\$up3273mp.bat
  3. set AMORCE=E:\Unrep\amorce.txt
  4. set RET=
  5. if exist %TEMPORAIRE% rm %TEMPORAIRE%
  6. if "%1"=="CeCiEstUneChAinESpECIaLeUh" goto getinfo
  7.  
  8. ::début de ton fichier batch original ...
  9.  
  10.  
  11. :: ici on traite.
  12.  
  13. copy %AMORCE%+rep1.txt %TEMPORAIRE%
  14. :: si tu a quand même les unixutils, alors tu peut remplacer la ligne précédante par
  15. :: echo -n "%1 CeCiEstUneChAinESpECIaLeUh " | copy con+rep1.txt %TEMPORAIRE%
  16. :: l'avantage c'est qu'il y a pas besoin d'amorce. on peut alors virer la ligne set AMORCE= au dessus
  17.  
  18. %TEMPORAIRE% @%0
  19. :getinfo
  20. :: ici on a la premiere ligne en argument, on peut donc la parser comme
  21. :: une ligne normale (attention car il faut quand même éliminer le premier terme)
  22. shift
  23. if "%1"=="" goto endget
  24. if not "%RET%"=="" set RET=%RET% "%1"
  25. if "%RET%"=="" set RET="%1"
  26. goto getinfo
  27. :endget
  28. ::suite du code, si on écrit :
  29. echo %RET%
  30. :: alors on affichera la premiere ligne du fichier avec des guillemets

ce qui se passe :
supposont que ton fichier contienne
klbackup 2006-06-09 # 16-19-01
Generated by some program that put randoms lines here ...

le copy va creer un fichier batch du genre : (en supposant que le script principal s'appelle ''script.bat'')
@script.bat CeCiEstUneChAinESpECIaLeUh klbackup 2006-06-09 # 16-19-01
Generated by some program that put randoms lines here ...

puis va l'executer, mais sans redonner la main à notre programme de départ
ce script formé de toute piece va lui simplement executer notre fichier de départ, mais avec un premier argument significatif et le reste de l'argument composé de la premiere ligne.
pour ne pas executer les lignes du dessous, on ne redonne pas la main après avoir rééxecuté notre script.
mais l'interpreteur il va nous aider : il va prendre la ligne et va nous prendre mot par mot les arguments que l'on pourrai traiter avec aise

TEMPORAIRE est une variable fixe qui doit contenir le chemin vers un fichier accesible en lecture/ecriture/execution
si on utilise une amorce, alors il faut que celle ci soit placé dans un repertoire accecible au moment ou on veut traiter la premiere ligne, et elle doit contenir :
@C:\chemin\vers\le\script\principal\script.bat CeCiEstUneChAinESpECIaLeUh
et surtout sans retour à la ligne dans le fichier


c'est moins propre mais ça reste dans l'esprit du batch.
Expert Programmation

Cool, jejetech à une solution full-anti-unix. :ange: 

C'est beau unix :
for i in `head -1 rep1.txt | tr -d "\""` ; do echo -n "\"$i\"" ; done > rep2.txt


Et encore, sans utiliser awk ! :pt1cable: 
Lassé par la pub ? Créez un compte