Redirection dans un fichier .bat

gaspard_;0) -  
 ksign -
Bonjour,

j'ai besoin d'aide pour mettre au point un petit script sous environnement Windows.

en gros : je dois créer un nom de fichier à partir d'un autre en changeant l'extention
ex : fichier d'origine -> toto.txt
nouveau fichier -> toto.tra

pour ça j'ai déjà trouvé comment recuperer le nom du fichier sans l'extention, c'est assez barbare donc si vous avez mieux je suis preneur, j'utilise :

for /F "useback tokens=1 delims=. %a in ('toto.txt') do echo %a


et je recupère le tout dans un fichier en faisant :

for /F "useback tokens=1 delims=. %a in ('toto.txt') do echo %a > pouet.txt


Mon problème est le suivant : dans une fenêtre de commande tout marche bien mais si je met cette ligne de commande dans un fichier .bat alors là plus rien ne se passe. Encore plus étrange, j'ai voulu examiner la sortie d'erreur pour voir ce qui ne va pas, je fais donc :

erreur.txt <&2 for /F "useback tokens=1 delims=. %%a in ('toto.txt') do echo %%a > pouet.txt

et là, et seulement là, le script me créer un fichier pouet.txt, mais vide !
Je n'y comprend plus rien, entre une fenêtre de commandes et un fichier de script, une même commande ne donne pas le même resultat ! ( vous aurez quand même remarqué que j'ai bien rajouter des % en plus dans mon script, comme indiqué )

Voilà, je suis au bord du gouffre alors si une âme généreuse veux bien se donner la peine ! ;o)
merci beaucoup

(ps : ne croyez pas que je fais ça pour le plaisir, sinon en bash c'est reglé en 2 minutes mais là c'est pour le boulot et les restrictions sont assez sevères, Windows et rien d'autre ! )
A voir également:

7 réponses

ksign
 
ce que je constate en partant, c'est qu'il te manque les guillemets de fermeture du useback
0
ksign
 
par ailleur, je ne comprend pas que cela fonctionne en utilisant 1 seul pourcentage.

voici une page avec des exemples:
https://www.dostips.com/DtTipsStringManipulation.php
0
knasucre22 Messages postés 104 Statut Membre 30
 
Essaye cmd /K "ta commande complete"

Le /K est pour que la fenetre reste ouverte apres l'execution et tu met /C a la place si tu veus qu'elle se ferme.

C'est peut-être le contraire , mais enfin c'est une des deux :D.

Tiens nous au courant.
0
gaspard_;0) Messages postés 2 Statut Membre
 
déjà merci pour vos propositions, je testerais ça demain matin et vous tiendrais au courant

ce que je constate en partant, c'est qu'il te manque les guillemets de fermeture du useback


oui, petite erreur de recopiage, le " est bien sur indispensable

par ailleur, je ne comprend pas que cela fonctionne en utilisant 1 seul pourcentage.

peut être, je ne suis pas du tout un spécialiste du batche mais dans l'aide en ligne de Microsoft il est clairement indiqué que dans une commande simple la syntaxe est : %maVariable et dans un script c'est : %%maVariable ( cf : reference de la commande FOR ), c'est tordu, soit, mais j'essaie dans un premier temps de suivre la doc !

A+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
gaspard_;0)
 
bon, c'est reglé

je dois dire que la commande Cmd /K m'a bien aidé, merci à knasucre22 ;o)

en fait, dans mon fichier .bat je faisait d'abord un changement de repertoire, mon fichier était donc texto :

cd U:\monDossier
erreur.txt <&2 for /F "useback tokens=1 delims=. %%a in ('toto.txt') do echo %%a > pouet.txt

il suffisait de supprimer la ligne cd U:\monDossier et la commande :

for /F "useback tokens=1 delims=. %%a in ('toto.txt') do echo %%a > pouet.txt marche parfaitement


Mais en poursuivant j'ai trouvé mieux, pour recuperer le nom d'un fichier sans son extention il suffit de faire :

for %A in (*.txt) do echo %~nA > pouet.txt

...et le tour est joué !
0
gaspard_;0)
 
encore moi : comment marque t'on la discussion comme resolue ?
0
knasucre22 Messages postés 104 Statut Membre 30
 
Tu te loggin et tu post un nouveau message , en dessous du champ de texte tu as deus boutons radio, tu en coche un pour dire que la discussion est résolue et tu envoie. Heureux de t'avoir aider , bonne journée.
0
ksign
 
pas nécessaire d'être inscrit pour marquer une question comme résolue.
il suffit de retrouver le mail initial t'avisant que ta question avait bien été postée sur le forum.
dans ce mail tu peux choisir de marquer la question comme résolue.
0