OVH Cloud OVH Cloud

*batch:redirection vers une variable*

3 réponses
Avatar
Daniel92
Bonjour,

Je coince sur quelque chose de simple,
dans un batch rediriger le résultat affiché d'une commande
vers une variable (et non un fichier).

exemple: attrib %systemdrive%\boot.ini
m'affiche à l'Invite:
A SH C:\boot.ini
je voudrais récupérer cette info dans une variable AttSav.

Merci,
Daniel.
====

3 réponses

Avatar
Jean-Claude BELLAMY
Dans le message news:%231f4$ ,
Daniel92 s'est ainsi exprimé:

Bonjour,

Je coince sur quelque chose de simple,
dans un batch rediriger le résultat affiché d'une commande
vers une variable (et non un fichier).

exemple: attrib %systemdrive%boot.ini
m'affiche à l'Invite:
A SH C:boot.ini
je voudrais récupérer cette info dans une variable AttSav.


Fastoche !!! ;-)


En ligne de commande :
...
for /F "delims=" %V in ('attrib %systemdrive%boot.ini') do set AttSav=%V
...


Dans un batch :
@echo off
...
for /F "delims=" %%V in ('attrib %systemdrive%boot.ini') do set AttSav=%%V
...


NB: si dans la commande (ici: attrib %systemdrive%boot.ini) il y a des
guillemets (p.ex. parce qu'on doit utiliser un nom de fichier long contenant
des espaces), il faut utiliser l'apostrophe inversée "`" (ALTGr-7) et
préciser le commutateur "usebackq" :
LDC :
for /F "usebackq delims=" %V in (`attrib "%userprofile%NTUSER.DAT"`) do set
AttSav=%V
Batch :
for /F "usebackq delims=" %%V in (`attrib "%userprofile%NTUSER.DAT"`) do
set AttSav=%%V


--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP] - http://www.bellamyjc.org
*

Avatar
Daniel92
"Jean-Claude BELLAMY" a écrit dans news:
du fil: http://groups.google.fr/groups?threadm=%231f4$

: > Je coince sur quelque chose de simple,
: > dans un batch rediriger le résultat affiché d'une commande
: > vers une variable (et non un fichier).
: >
: > exemple: attrib %systemdrive%boot.ini
: > m'affiche à l'Invite:
: > A SH C:boot.ini
: > je voudrais récupérer cette info dans une variable AttSav.

: Fastoche !!! ;-)
: En ligne de commande :
: ...
: for /F "delims=" %V in ('attrib %systemdrive%boot.ini') do set AttSav=%V
:
: Dans un batch :
: @echo off
: ...
: for /F "delims=" %%V in ('attrib %systemdrive%boot.ini') do set AttSav=%%V
: ...

** Merci Jean Claude, je n'avais pas été assez loin, je me suis arrêté à:
for /f %%a in ('attrib %systemdrive%boot.ini') do set AttSav=%%a
merci aussi pour le complément sur son utilisation avec des guillemets.

:O)
Daniel.
====
Avatar
Daniel92
Bonjour Jean-Claude, Bonjour à tous,

1- Ne rigole surtout pas! J'ai passé 2h+ à trouver la cause d'une
erreur ... des plus stupides:
J'avais ce message d'erreur pour la seule commande ' ECHO. '
(les autres commandes avec echo, y compris ' ECHO, '
fonctionnaient correctement) :

'echo.' n'est pas reconnu en tant que commande interne
ou externe, un programme exécutable ou un fichier de commandes.

==> et bien ... c'était tout simplement un fichier echo vide créé
dans le répertoire "C:XScrTst" que j'active dans mes fichiers de
commandes. Mes fichiers PE de script sont dans un autre répertoire.
( echo ou echo. sans extension, j'ai un doute ?)
Bref c'était suffisant pour bloquer le fonctionnement de la commande.

2- Je reviens sur l'Erreur à l'appel de ' edit.com ' :
Est ce qu'il n'y a pas une contrainte de nombre de niveau de
répertoire dans l'arborescence d'un chemin pour appeler un
programme msdos à partir d'un script?

Mes batch (et autres cmd) sont appelés à partir du répertoire
C:A1DCjobWorkMaintPCEventsErrProgCommdeApprendLangRech&JFBootIniCmdexmp_dc1
soit directement, soit à partir d'un raccourci paramétré d'Invite,
et certains sont dans des sous-dossiers, donc 8 ou 9 niveaux,
(je ne sais pas si on doit compter le répertoire du lecteur?)

3- Y a-t-il quelque chose à manger en exploitant directement
les tampons (stack,handle) ? :
STDIN, STDOUT,STDERR, UNDEFINED
si bien sûr on peut les appeler directement en dehors de
l'utilisation :
- des opérateurs de redirection pour les fichiers,
- de la commande For et de la barre verticale ' | '
pour les variables .

Merci,
:O)
Daniel.
====