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

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  DOS : manipulation de chaîne ...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

DOS : manipulation de chaîne ...

n°1234453
antolionux
Posté le 30-10-2005 à 13:38:14  profilanswer
 

Sujet original : http://forum.hardware.fr/hardwaref [...] 1243-1.htm
 
Bonjour  :hello:  
 
La commande ci-dessous est censé supprimer C:\WINDOWS\extratools ( %systemroot%\%new_rep% ) de la variable PATH, mais ça ne fonctionne pas :
 
 
     set path=%path:%systemroot%\%new_rep%=%
 
 
note :  %path:ch1=ch2% permet de remplacer ch1 par ch2 dans la variable path (cf : aide de SET sous DOS)
 
 
Donc dans mon cas :
• ch1 vaut %systemroot%\%new_rep%
• ch2 vaut une chaîne vide
 
 
ça fait déjà plusieurs jours que je me creuse la tête sur ce problème, alors si quelqu'un peut m'aider ça serait super sympas
D'avance merci  :)
 
-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
 
 
Réponse de : arnaud1206
 
Salut    
 
Essaie de le poster sur programmation shell/batch  
 
Ce que tu peux faire c est au lieu de supprimer ce qui te derange, c est d affecter a la varible path la chaine que tu veux  
Tu mets le contenu de ta variable dans un fichier texte, tu la casses a chaque ; et ensuite tu reconstruis la chaine que tu veux en n affichant que les lignes ne contenant pas %systemroot%\%new_rep%  
( tout se fait avec for /F ) et pas trop de pbs de syntaxes car la syntaxe des % n est pas toujours aisee et j ai aussi essaye ton cas et moi aussi pb de syntaxe alors ;oyen detourne    
@++
 
 


Message édité par antolionux le 30-10-2005 à 13:41:12
mood
Publicité
Posté le 30-10-2005 à 13:38:14  profilanswer
 

n°1234456
antolionux
Posté le 30-10-2005 à 13:45:38  profilanswer
 

Ah oui j'y avais pas pensé !!! Mais je débute sous dos et la manipulation de chaîne je connais pas vraiment.  
 
En gros tu utilises quoi comme commande pour bidouiller les chaîne de caractère ?

n°1234467
wackevat
Posté le 30-10-2005 à 14:34:50  profilanswer
 

Bonjour,  
 
Le remplacement des caractères dans une chaîne par :  
%path:ch1=ch2%  
ne fonctionne qu'avec une valeur et non pas avec une variable.  
 
En effet, ton expression  
%path:%systemroot%\%new_rep%=%  
est interprétée comme une concaténation de :  
- la valeur de la variable path: %path:%  
- suivie de la chaîne : systemroot  
- puis la valeur de la variable \ : %\%  
- la chaîne new_rep  
- et enfin, la valeur de la variable = : %=%  
 
{%path:%systemroot%\%new_rep%=%}={%path:%}+{systemroot}+{%\%}+{new_rep}+{%=%}
 
Pour ton problème, tu peux effectivement utiliser une boucle
for
avec comme délimiteur le point-virgule (;), pour extraire les chemins du PATH actuel et recalculer sa nouvelle valeur.
 
Pour chaque valeur récupérée, tu la compares avec
%systemroot%\%new_rep%
afin de décider si elle est à concaténer au nouveau PATH.
 
Voilà ;)

n°1234468
wackevat
Posté le 30-10-2005 à 14:36:45  profilanswer
 

PS : et je tiens à préciser que ce n'est pas du DOS ce que tu essaies à faire. C'est l'invite de commandes Windows, dont la syntaxe est beaucoup plus évoluée que celle du DOS d'antan.

n°1234471
KangOl
Profil : pointeur
Posté le 30-10-2005 à 14:43:07  profilanswer
 

set path=%path:{%systemroot%}\{%new_rep%}=%


 
ca passe pas ca ?


---------------
Nos estans firs di nosse pitite patreye...
n°1234477
wackevat
Posté le 30-10-2005 à 14:56:42  profilanswer
 

KangOl a écrit :

set path=%path:{%systemroot%}\{%new_rep%}=%


 
ca passe pas ca ?


Non, car { et } sont interprétés comme des simples caractères.
 
Tu peux essayer chez toi.

n°1234481
wackevat
Posté le 30-10-2005 à 14:59:33  profilanswer
 

wackevat a écrit :

Pour ton problème, tu peux effectivement utiliser une boucle
for
avec comme délimiteur le point-virgule (;), pour extraire les chemins du PATH actuel et recalculer sa nouvelle valeur.


Je me reprends ;)
 
En "trichant" un peu, on peut y arriver comme ça :
------------------------------
@echo off
 
setlocal enableExtensions
 
set PATHTMP="%PATH:;=" "%"
call :getPATH %PATHTMP%
goto end
 
:getPATH
if "%~1" neq "" (
  echo %~1
  shift
  goto getPATH
)
 
:end
endlocal&&goto :eof
------------------------------

n°1234558
arnaud1206
Posté le 30-10-2005 à 18:48:58  profilanswer
 

Salut
 
Je reviens de lire ton premier post et tu connais le contenu %systemroot%\%new_rep% qui est C:\WINDOWS\extratools alors pourquoi ne pas faire tout simplement  
set pathtemp="%PATH:;C:\WINDOWS\extratools=" ""
 
@nglechau 1/connais tu un bon bouquin sur le batch en windows???
               2/sympa ce cassage de chaine je vais le garder dans un coin
 
@++

n°1234567
wackevat
Posté le 30-10-2005 à 19:01:07  profilanswer
 

Pour le premier point : je pense que antolionux voudrait le faire dans un cas général, par exemple, pour le déployement sur un poste où Windows n'est pas nécessairement installé sur C et/ou dans un dossier appelé Windows.
 
Pour ta question : je ne connais pas ton niveau. Si pour débuter, télécharge PowerBatch qui inclut un tuto sympa. Autrement, le meilleur site à mon avis est :
http://www.robvanderwoude.com/


Message édité par wackevat le 30-10-2005 à 19:01:34
n°1234593
arnaud1206
Posté le 30-10-2005 à 19:55:02  profilanswer
 

Je m y remets tout doucement les souvenirs sont loins, le pb c est que j etais en unix et je repasse a windows.Alors niveau algo ca va les pbs sont les outils a ma disposition et surtout la syntaxe,enfin maintenant ca va mieux pour les % %% et ! grace a toi :jap:
Merci pour l info


Message édité par arnaud1206 le 30-10-2005 à 19:56:56
mood
Publicité
Posté le 30-10-2005 à 19:55:02  profilanswer
 

n°1234595
wackevat
Posté le 30-10-2005 à 19:57:02  profilanswer
 

OK, pas de souci. Le forum est là pour ça ;)
 
@+

n°1234638
antolionux
Posté le 30-10-2005 à 22:13:25  profilanswer
 

Et bien je vois que ma question a eu du succès :), en tout cas merci à tous pour votre aide, j'ai maintenant plusieurs pistes à exploiter. Je pige encore pas tout, car ça fait que quelques jours que j'ai appris à faire des batch.
 
En tout cas je vais tester tout ça, et je vous tiendrais au courant si ça fini par marcher ;)

n°1801592
djyahoo
Posté le 17-10-2008 à 17:54:49  profilanswer
 

A toutes fins utiles, voici une réponse à ce problème non trivial...
Cette solution est sous la forme d'une fonction
 
 
Exemples d'appel dans un script bat :  
call:remplacerSousChaine bonjour#VARIABLE#monde #VARIABLE# le
echo %chaineReponse%
--> affichera : "bonjourlemonde"
 
Du coup pour le message initial, la solution est :
call:remplacerSousChaine "%path%" "%systemroot%\%new_rep%" ""
 
Voici la fonction :
 
REM -------------------------------------------------------------------------------------------------------------
REM Cette fonction permet de remplacer dans une variable donnée du texte par un autre
REM Préconditions
REM  * la variable d'environnement %chaineReponse% ne doit pas être initialisée, car elle va être utilisée au cours des traitements internes de cette fonction
REM * les droits en écriture sur le répertoire courant doivent être attribués à ce script, car celui-ci utilise un fichier temporaire.
REM parametres :
REM   %1  : le texte complet, dont il faut remplacer une sous-chaîne "%chaineARemplacer% par une autre %chaineDeRemplacement%
REM   %2  : le texte dont il faut remplacer une sous-chaîne par une autre
REM   %3  : le texte de remplacement.
REM
REM Si des espaces sont contenus dans les paramètres, il est nécessaire d'encapsuler ces paramètres par des doubles cotes
REM  
REM Exemples d'appels  
REM  
REM    call:remplacerSousChaine "bonjour #ARTICLE# monde !" #article# le
REM    ---> retournera "bonjour le monde" (sans les guillemets
REM    call:remplacerSousChaine bonjour#ARTICLE#monde #article# le
REM    ---> retournera "bonjourlemonde" (sans les cotes)
REM Post-conditions
REM * la variable %chaineReponse% contient le texte %chaineDeTravail% dans lequel toutes les occurrences de %chaineARemplacer% ont été substituées par %chaineDeRemplacement%
REM -------------------------------------------------------------------------------------------------------------
:remplacerSousChaine
 
 
 REM ATTENTION, pour toute évolution dans cette fonction, faire très attention à ne pas mettre d'espace
 REM dans les instructions, car cela génèrera une réponse avec espaces !
 call:supprimerQuotes %1
 set chaineDeTravail=%reponseSupprimerQuotes%
 call:supprimerQuotes %2
 set chaineARemplacer=%reponseSupprimerQuotes%
 call:supprimerQuotes %3
 set chaineDeRemplacement=%reponseSupprimerQuotes%
   
 set partiedroite=%%chaineDeTravail:%chaineARemplacer%=%chaineDeRemplacement%%%
 
 set instruction=set chaineReponse=%partiedroite%
 
 rem le nom du fichier bat que l'on va générer pour l'occasion...
 set FICHIER_BAT_TMP=lance.bat
 
 rem le nom du fichier reponse dans lequel le fichier bat temporaire va écrire son résultat.
 set FICHIER_REPONSE_TMP=reponse.txt
   
 rem on supprime le bat temporaire et son fichier de réponse associé
 if exist %FICHIER_BAT_TMP% del %FICHIER_BAT_TMP%
 if exist %FICHIER_REPONSE_TMP% del %FICHIER_REPONSE_TMP%
 
 echo @echo off > %FICHIER_BAT_TMP%
 echo set chaineDeTravail=%chaineDeTravail%>>%FICHIER_BAT_TMP%
 echo %instruction%>>%FICHIER_BAT_TMP%
 echo echo %%chaineReponse%%^>%FICHIER_REPONSE_TMP%>>%FICHIER_BAT_TMP%
 echo exit >> %FICHIER_BAT_TMP%
 
 cmd /C %FICHIER_BAT_TMP%
 
 FOR /F "delims=," %%i IN (%FICHIER_REPONSE_TMP%) DO set chaineReponse=%%i
 
 rem suppression du fichier temporaire de réponse...
 del %FICHIER_REPONSE_TMP%
 del %FICHIER_BAT_TMP%
goto:eof
 
REM Cette fonction supprime les guillemets éventuels du paramètre
REM Le résultat est stocké sous %reponseSupprimerQuotes%
:supprimerQuotes
  set str=%1
  for /f "useback tokens=*" %%a in ('%str%') do set str=%%~a
  set reponseSupprimerQuotes=%str%
goto:eof
 


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

  DOS : manipulation de chaîne ...

 

Sujets relatifs
Debutant - Comparaison de chaine de caractèrecompter le nombre de fois que le mot est dans une chaine de caractére:
Date format chaine de caractereAller à la derniere ligne d'un fichier texte et recherche chaine
copie d'une chaine de caractères[DOS] extraire le nom d'un fichier pour renommer un autre
Exécuter une chaîne de caractère en PL/SQLCouper chaîne de caractère
Comment est-ce qu'on peut changer un fichier wave (console Dos)?caractère ASCII dans batch DOS
Plus de sujets relatifs à : DOS : manipulation de chaîne ...


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