remplacer une chaine de caractere dans un fichier en .bat - Shell/Batch - Programmation
Marsh Posté le 28-09-2005 à 11:04:31
c'est pas gagne en shell dos comme une petite recherche sur le forum te l'aurais indique
http://forum.hardware.fr/hardwaref [...] 2393-1.htm
Marsh Posté le 28-09-2005 à 11:49:58
y a cette commande qui permet de separer la ligne en 2partie mai le delime separe la ligne quand il trouve soit - soit > ou l espace.
ya un moyen pour force le delime de prendre toute la chaine " -> " ??
for /f "tokens=1,2* delims= -> " %%a in (c:fichier.txt) do (echo %%a %%b >>c:\log.txt
la commande est san resultat
Marsh Posté le 28-09-2005 à 12:46:50
naouf8 a écrit : for /f "tokens=1,2* delims= -> " %%a in (c:fichier.txt) do (echo %%a %%b >>c:\log.txt |
Tu as un espace de trop après delims= et avant ->
Code :
|
Marsh Posté le 28-09-2005 à 16:11:53
rappel mon fichier test.txt :
source1 -> destination2
le cas dessus je recupere la ligne devisé en 2 le %%a et %%b mai si la source"un nom de fichier" contien le symbole '-' , je recupere que une partie de nom de fichier !!!! par ce qu le delime seppare caracter par caractere
donc je cherche commen je separ la ligne par une chaine de caractere ???
Marsh Posté le 28-09-2005 à 17:13:29
Tu as combien de fichiers à traiter ? C'est une tâche occasionnelle ou régulière ?
Marsh Posté le 29-09-2005 à 10:04:52
Eh bien, Bloc-notes
Tu n'avais pas compris le sens du param delimS = délimiteurS = liste des délimiteurS != une chaîne qui joue le rôle de délimiteur.
Marsh Posté le 29-09-2005 à 17:43:54
ReplyMarsh Posté le 30-09-2005 à 10:50:42
naouf8 a écrit : ok donc y a pa un moyen pr faire une chaine délimiteur !!! |
Si !
Si comme tu dis, ce sont le nom des dossiers/fichiers, dont le caractère > n'est pas autorisé. Tu peux donc l'utiliser comme délimiteur, puis après découpage, tu enlèves les caractères de trop à la fin de la première valeur et au début de la deuxième. Reste plus qu'à reconstruire la ligne.
Marsh Posté le 30-09-2005 à 12:21:26
ok nglechau,
la qustion est comment je fait pr enlevé les 2 dernier caractere pour le 1er variable et enlevé le 1er caractere du 2eme variable ????
Marsh Posté le 30-09-2005 à 14:09:26
Merci "pascale73" pour le code mais malhereusement ca marche pas.
par ce que si la source contient des espace "la source-1 -> desti 2", la 1er variable contien que "la"
Marsh Posté le 30-09-2005 à 16:21:13
naouf8 a écrit : ok nglechau, |
Regarde dans l'aide de la commande
set
Tu y trouves plein d'exemples.
Marsh Posté le 30-09-2005 à 17:01:45
j ai cherché mais j ai pas trouvé des option qui permet d enlvé un nombre x caracteres a la fin ou au debut d une variable , est ce que tu connai la commande par coeur ??
Marsh Posté le 30-09-2005 à 18:26:12
naouf8 a écrit : j ai cherché mais j ai pas trouvé des option qui permet d enlvé un nombre x caracteres a la fin ou au debut d une variable , est ce que tu connai la commande par coeur ?? |
Bien sûr que je la connais.
Tu es sûr d'avoir tout lu ?
set /?
Si VAR=abcdef
alors %VAR:~2,3% sera cde
Il suffit donc de faire
set VAR=%VAR:~2,3%
Je te laisse le soin de décortiquer le reste de l'aide. Absolument tout y est.
Marsh Posté le 01-10-2005 à 13:12:08
pascale73 a écrit : |
Il y a plusieurs raisons :
- comme tu dis, il faut connaitre le nombre de "tokens" (avant et après le séparateur) à l'avance
- et s'il y a deux ou plus d'espaces consécutifs dans les noms de fichier ?
- tu n'élimines pas le - juste avant >
Marsh Posté le 01-10-2005 à 14:03:16
les espaces sont gérables mais un caractère réservé en plus...
franchement neglchau, je renonce à trouver une solution en DOS, à la place de naouf8 je passerais par notepad ou utiliserais un programme externe type switch.exe.
Marsh Posté le 01-10-2005 à 14:13:45
Je suis d'accord avec toi. C'est d'ailleurs ce que je lui ai conseillé plus haut, vu qu'il n'a qu'un seul fichier à traiter
Sinon, ça devrait se faire comme j'ai proposé dans mon post le 30-09-2005 à 10:50.
Marsh Posté le 04-10-2005 à 14:46:29
je vous merci les gas pr l aide, voila j ai trouvé le script qui me convien je le publié en cas ou!!!
for /f "tokens=1,2* delims=>" %%b in (c:\test.txt) do (
set var1=%%b
set var2=%%c
rem echo %var2% >> c:\log.txt
call :commande
)
goto end
:commande
set ligne1=%var1%
set ligne2=%var2%
echo "%ligne1:~0,-2%" "%ligne2:~1%" >> c:\coucou.txt
:end
endlocal&&goto :eof
donc avec un fichier test.txt qui contien:
source-1 -> destina-tion1
sou-rce 2 -> destination_2
source3 -> destinatio-n 3
source 4 -> destin ation 4
j oubtien le fichier log:
"source1" "destination1"
"source 2" "destination2"
"source3" "destination 3"
"source 4" "destination 4"
si vous avez des idée pr amelioré le scripte n hésité pas merci
Marsh Posté le 04-10-2005 à 14:50:08
deslé j ai trmpé de fichier log c le :
"source-1" "destina-tion1"
"sou-rce 2" "destination_2"
"source3" "destinatio-n 3"
"source 4" "destin ation 4"
Marsh Posté le 04-10-2005 à 14:51:51
C'est bon, c'est exactement ce qu'il fallait !
Juste deux (très) petites remarques :
- n'oublie pas le
setlocal
au début du script
- pas besoin de créer deux nouvelles variables, tu peux faire directement :
echo "%var1:~0,-2%" "%var2:~1%" >> c:\coucou.txt
Voulou
Marsh Posté le 07-10-2005 à 15:16:50
ReplyMarsh Posté le 07-10-2005 à 19:27:36
meduze2000 a écrit : il faut tout simplement utiliser la commande SET avec le : |
Juste un espace de plus à éliminer :
SET VAR2=%VAR1:-> = %
Marsh Posté le 28-09-2005 à 10:45:38
voila je veux remplacer une chaine de caractere dans un fichier txt sous shell DOS
exemple de fichier txt
source1 -> destination1
source 2 -> destination2
source3 -> destination 3
source 4 -> destination 4
donc je veux remplacer la chaine " -> " par un simple espace " "
j'ai essayé cette commende mais ca marche pas :
findstr " -> " | replace " " >> res.txt
qq un a une idée ou une methode ?? mercii