Deux commandes dos dans un fichier bat

Fermé
BAZ187REM - 5 juil. 2009 à 17:15
 BAZ187REM - 7 juil. 2009 à 11:57
Bonjour à toutes et tous,

Je cherche désespérément comment faire pour exécuter deux commandes dos dans un fichier bat.

J'explique mon cas, si j'ouvre un invite de commande et que je fais :

set NETUSER=blabla entrée puis une commande rcp.exe cela fonctionne la copie de mon fichier sur un serveur passe sans problème

par contre dans un fichier bat si je fais
set NETUSER=blabla

puis

set ComRCP= rcp.exe balqskdflkqqkldfqld

ca ne fonctionne pas il me dit permission denied.

Comment faire pour avoir dans une meme variable le résultat de deux commandes dos ex


Set NETUSR=set NETUSER=blabla
set CommRCP=rcp.exe qmdslqjdmfqd
set CommandLine=%NETUSR%&&%CommRCP%

si je fais un echo de CommandLine je n'ai que %NETUSR% soit set NETUSER=blabla

J'ai essayé aussi avec les guillemets mais bon lorsque dans le bat j'exécute %CommandLine% il ne reconnait pas la commande du au guillemets et si je traite le résultat de chaine sans les guillemets %CommandLine:"=% et que je fais un echo je n'ai donc que le %NETUSR%

Je sais pas si j'ai été très clair mais si vous avez des questions sur mon problème n'hésitez pas

Merci d'avance pour toutes vos réponses
A voir également:

7 réponses

cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
5 juil. 2009 à 19:34
Bonsoir,


Si j'ai bien compris le problème ?
J'ai fait quelques tests dont ceux-ci, je n'ai pas rencontré de problème particulier semble-t-il. Je n'ai pas pu testé rcp.exe dans sa finalité, à l'exécution il affiche le help !!!!.
echo off
SETLOCAL ENABLEdelayedExpansion
SETLOCAL ENABLEextensions
CLS
 Set "NETUSR=set NETUSER=blabla"
    echo Test contenu de NETUSR: %NETUSR%
set "CommRCP=rcp.exe qmdslqjdmfqd"
rem set "CommRCP=call x.bat qmdslqjdmfqd"
    echo Test contenu de CommRCP:  %CommRCP%
   pause
set "CommandLine=%NETUSR%&&%CommRCP%"
   echo "Test contenu de CommandLine: %CommandLine%"
 pause
 %CommandLine%
    echo Test contenu de NETUSER: %NETUSER%
goto :EOF

RESULTATS avec rcp.exe qmdslqjdmfqd:
Test contenu de NETUSR: set NETUSER=blabla
Test contenu de CommRCP:  rcp.exe qmdslqjdmfqd
Appuyez sur une touche pour continuer...
"Test contenu de CommandLine: set NETUSER=blabla&&rcp.exe qmdslqjdmfqd"
Appuyez sur une touche pour continuer...

Copie les fichiers depuis et vers l'ordinateur exécutant le service RCP. (!!!!!!!!!!!!)

RCP [-a | -b] [-h] [-r] [host][.user:]source [host][.user:] path\destination

  -a                 Spécifie le mode de transfert ASCII. Ce mode convertit
                     les caractères EOL en retours chariot sous UNIX et en
                     retours chariot/line feed sur PC. C'est le mode de
                     transfert par défaut.
  -b                 Spécifie le mode de transfert d'images binaire.
  -h                 Transfère les fichiers cachés.
  -r                 Copie le contenu de tous les sous-répertoires ;
                     la destination doit être un répertoire.
  host               Spécifie l'hôte local ou distant. Si l'hôte spécifié est
                     une adresse IP, vous devez spécifier l'utilisateur.
  .user:             Spécifie le nom d'utilisateur à utiliser à la place du
                     nom d'utilisateur en cours.
  source             Spécifie les fichiers à copier.
  path\destination   Spécifie le chemin relatif au répertoire de session sur
                     l'hôte distant. Utilisez les caractères d'échappement
                     (\ , ", ou ') dans les chemins distants pour utiliser les
                     caractères jokers sur l'hôte distant.

Test contenu de NETUSER: blabla


RESULTATS avec call x.bat qmdslqjdmfqd:
Test contenu de NETUSR: set NETUSER=blabla
Test contenu de CommRCP:  call x.bat qmdslqjdmfqd
Appuyez sur une touche pour continuer...
"Test contenu de CommandLine: set NETUSER=blabla&&call x.bat qmdslqjdmfqd"
Appuyez sur une touche pour continuer...

Nous sommes passés dans x.bat qmdslqjdmfqd  (<== message renvoyé par x.bat)
Test contenu de NETUSER: blabla
0
Merci CChristian pour ton aide,

il semble qu'avec ton exemple cela ne fonctionne pas mieux :
echo off
SETLOCAL ENABLEdelayedExpansion rem <--- commande SETLOCAL n'est pas reconnue
SETLOCAL ENABLEextensions rem <--- commande SETLOCAL n'est pas reconnue
CLS
SET "NETUSR=set NETUSER=blabla"
ECHO Test contenu de NETUSR: %NETUSR% rem <-- renvoye bien set NETUSER=blabla"
SET "CommRCP=rcp.exe qmdslqjdmfqd"
ECHO Test contenu de CommRCP: %CommRCP% rem <-- renvoye bien rcp.exe qmdslqjdmfqd"
SET "CommandLine=%NETUSR%&&%CommRCP%"
ECHO "Test contenu de CommandLine: %CommandLine%" rem <-- renvoye uniquement set NETUSER=blabla"
rem
rem %CommandLine%
rem echo Test contenu de NETUSER: %NETUSER%
goto :EOF
0
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
6 juil. 2009 à 22:42
J'ai recréé le cas (l'un des cas ?) en supprimant les doubles quotes de l'instruction :
set "CommandLine=%NETUSR%&&%CommRCP%"

"Test contenu de CommandLine: set NETUSER=blabla" (<== il en manque....)
Appuyez sur une touche pour continuer...

0
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
6 juil. 2009 à 17:13
Bonjour,

Surprenant en effet cela fonctionne chez moi. Restait les commandes SETLOCAL qui, chez toi ne sont pas reconnues mais je viens de faire un essai en les supprimant et c'est bon ! Je ne comprends pas, je vais regarder encore.
0
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
6 juil. 2009 à 18:55
message annulé par moi-même double emploi avec le précédent qui avait disparu !
0

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

Posez votre question
Merci encore pour ton aide, j'ouvre un deuxième post pour un autre problème dans un fichier bat ^^ au cas ou tu peux m'aider aussi.

Je mets au propre mon fichier bat et je le post ici ce sera peut etre mieux :)
0
C'est cool je me répond a moi même :)

Je testerai dans la journée mais je viends de me souvenir qu'il y a des caractères spéciaux en bat

&<>|^% et peut etre d'autre il faut echappé ces caractères sinon ils sont pris comme commande interne. Pour cela il faut inséré ^ devant chaque caractère que l'on veut garder exemple

^& ^< ^> ^| ^^ ^%

Je dirai si cela fonctionne en mettant le ^ dans ma ligne de commande CommandLine
0
Bonjour à toutes et tous,

J'ai trouvé et maintenant cela fonctionne


set ComNET=set NETUSER=%NET_USR%

set COMRCP=%LOCAL_PATH%\rcp.exe %LOCAL_FILE% %LOCAL_USR%@%RR_HOST%:%RR_PATH%/%RR_DEST_FILE%

set ComLineRCP=%ComNET%^&^&%COMRCP%

set ComRSH=%LOCAL_PATH%\rsh.exe %RR_HOST% -l %LOCAL_USR% chmod a+rw %RR_PATH%/%RR_DEST_FILE% ; touch %RR_PATH%/%LEFT_RR_DEST_FILE%flg; chmod a+rw %RR_PATH%/%LEFT_RR_DEST_FILE%flg

set ComLineRSH=%ComNET%^&^&%ComRSH%

echo ****************************** BEGIN **************************************** >> %LOG_FILE%
echo ** Timestamp.....: %date% %time% >> %LOG_FILE%
echo ** Publish name..: %PUBLISH_NAME% >> %LOG_FILE%
echo ******************************************************************************* >> %LOG_FILE%
echo ** Commande RCP : %COMRCP% >> %LOG_FILE%
echo ******************************************************************************* >> %LOG_FILE%
echo ** Commande RSH : %ComRSH% >> %LOG_FILE%
echo ******************************************************************************* >> %LOG_FILE%
echo ** %date% %time% : "Begin.... RCP" >> %LOG_FILE%
%ComLineRCP%
if ERRORLEVEL 1 goto :errorRCP
SLEEP %TEMPO_COM%

echo ** %date% %time% : "Begin.... RSH" >> %LOG_FILE%
%ComLineRSH%

if ERRORLEVEL 1 goto :errorRSH
SLEEP %TEMPO_END%

echo ** %DONE% : %date% %time% >> %LOG_FILE%
echo ______________________________ END ________________________________________ >> %LOG_FILE%


Encore merci à ceux qui auraient pu m'aider ou qui ont lu le post pour s'intéresser :)
0