[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
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
Autres pages sur : batch probleme espace ligne fichier
Lassé par la pub ? Créez un compte
Sous UNIX (ou sous Windows avec les bons outils) :
head -1 repertoire1.txt | sed "s/\([ ]*\)\(.*\)/\2/" > rep1.txt
Pour avoir les bons outils sous Windows, voir UnxUtils
head -1 repertoire1.txt | sed "s/\([ ]*\)\(.*\)/\2/" > rep1.txt
Pour avoir les bons outils sous Windows, voir UnxUtils
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.
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.
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 ??
@echo off
set TEMPORAIRE=%TMP%\$up3273mp.bat
set AMORCE=E:\Unrep\amorce.txt
set RET=
if exist %TEMPORAIRE% rm %TEMPORAIRE%
if "%1"=="CeCiEstUneChAinESpECIaLeUh" goto getinfo
::début de ton fichier batch original ...
:: ici on traite.
copy %AMORCE%+rep1.txt %TEMPORAIRE%
:: si tu a quand même les unixutils, alors tu peut remplacer la ligne précédante par
:: echo -n "%1 CeCiEstUneChAinESpECIaLeUh " | copy con+rep1.txt %TEMPORAIRE%
:: l'avantage c'est qu'il y a pas besoin d'amorce. on peut alors virer la ligne set AMORCE= au dessus
%TEMPORAIRE% @%0
:getinfo
:: ici on a la premiere ligne en argument, on peut donc la parser comme
:: une ligne normale (attention car il faut quand même éliminer le premier terme)
shift
if "%1"=="" goto endget
if not "%RET%"=="" set RET=%RET% "%1"
if "%RET%"=="" set RET="%1"
goto getinfo
:endget
::suite du code, si on écrit :
echo %RET%
:: 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 ...
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 ...
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 fichierc'est moins propre mais ça reste dans l'esprit du batch.
Lassé par la pub ? Créez un compte
- Contenus similaires :
Tags :
- ForumProbleme espace ligne de commande
- ForumEspace fichier batch
- ForumEspace en ligne de collaboration
- ForumBatch espace
- ForumQu'est ce qu'un fichier batch
- ForumBatch derniere ligne
- ForumBatch renomer fichier
- ForumBatch espace graphisme
- ForumBatch nom avec espace
- ForumBatch dã placer fichier
- Voir plus