Executer batch en réseau

Executer batch en réseau - Windows & Software

Marsh Posté le 11-07-2005 à 22:28:50    

Bonjour,
 
J'ai un problème plutôt ennuyeux : mes batchs ms dos ne se lancent pas correctement en réseau, en fait le problème c'est que le repertoire par défault n'est plus celle où se trouve le fichier parce que la commande CD ne supporte pas les euh... chemins unc ("CMD does not support UNC paths as current directories." ).
 
Donc pour pallier ce problème j'ai trouver une astuce : en utilisant pushd qui lui le supporte. MAIS comment faire pour mettre une ligne avec pushd dans un fichier bat sachant que dès le lancement de celui-ci, je perds le chemin du dossier où se trouvais le fichier ?
 
Voilà, j'espère que j'ai été clair, sinon demandez moi de réexpliquer. Merci d'avance.

Reply

Marsh Posté le 11-07-2005 à 22:28:50   

Reply

Marsh Posté le 12-07-2005 à 09:35:17    

sous quel OS utilises tu tes Batchs
 

Reply

Marsh Posté le 12-07-2005 à 10:02:39    

Sous XP

Reply

Marsh Posté le 12-07-2005 à 14:36:11    

desole je ne comprends pas. Publies ton batch qu'on regarde.
Mais rien ne t'empeche de faire des batches avec \\serveru\shgare\...

Reply

Marsh Posté le 12-07-2005 à 15:47:07    

Quand tu fait un pushd tu efface et remplace par la valeur derriere et alors tu fait popd et tu appel le chemin par contre je comprend pas trop ce qui cloche donc poste ton script on pourra plus t'aider.
C:\>pushd /?
Stocke le répertoire en cours pour utilisation par la commande POPD, ensuite
passe au répertoire spécifié.
 
PUSHD [chemin | ..]
 
  chemin     Répertoire permettant de définir le répertoire en cours.
 
Si les extensions de commandes sont activées, la commande PUSHD accepte
les chemins réseau en plus des lettres de lecteurs et chemins usuels.
Si un chemin réseau est spécifié, PUSHD associera une lettre de lecteur
temporaire à la ressource réseau spécifiée puis changera le lecteur
et le répertoire en cours, en utilisant la lettre ainsi définie. Les
lettres de lecteur temporaire sont données à partir de Z: en descendant,
en utilisant la première lettre libre trouvée.
L'aide CMD de windows c'est pratique!

Reply

Marsh Posté le 12-07-2005 à 15:50:48    

Si tu montrais ton batch, ça serait plus simple... Parce que je ne vois pas trop pourquoi tu fais un "CD"  dans un batch


---------------
Cherche geekette | Traquez vos billets d'€ | Don du sang | Don de moelle osseuse
Reply

Marsh Posté le 12-07-2005 à 18:15:58    

D'abord, merci pour vos réponses.
 
sdeville : le problème c'est que mon batch est un peu long, et il y a plein de choses inutiles pour comprendre, alors je te fais plutôt un exemple type du problème
 
@ECHO OFF
CALL BAT\fichier.bat
 
Peut importe ce que contient fichier.bat, en le lançant au favoris réseau j'ai ça :
 
'\\Pc2\Documents'
CMD.EXE was started with the above path as the current directory.
UNC paths are not supported.  Defaulting to Windows directory.
 
Donc, Sm@No, j'ai bien compris comment fonctionne pushd mais le problème c'est comment l'utiliser, j'ai envie de faire un pushd %CD% mais j'ai plus %CD% dès que je le lance

Reply

Marsh Posté le 13-07-2005 à 08:19:58    

Quand tu fait un call tu peu envoyer des parametres:
Comme sa aussi plus simple:
@\\SERVEUR\netlogon\UserScript PARAM1
 
ensuite tu utilise %i% par exemple pushd %i% i qui est la var envoyer dans script UserScript.

Reply

Marsh Posté le 13-07-2005 à 18:27:39    

Je vois ce que tu veux faire, mais ça ne marche pas si on le lance à partir du favoris réseau (je veux que ça marche aussi bien par ligne de commande que par double-clik).
 
En fait, j'ai même l'impression qu'on ne peut pas lancer un batch en gardant le repertoire par défault, puisqu'on ne la plus après. Alors j'ai pensé à une autre solution : si je créé un fichier exe qui lui supporte les chemins réseaux et qui lance ensuite le fichier bat avec en argument le chemin de l'exe, vous en pensez quoi ?
 
Comme je commence à faire du c++, j'ai essayé comme ça ( j'ai vraiment galéré pour trouver comment faire arf )
 
#include <windows.h>
#include <iostream.h>
 
void GetChemin(char *chemin, DWORD taille)
{
char *c;
c = chemin + GetModuleFileName(NULL,chemin,taille);
while(*c!='\\')
c--;
*c=0;
}
 
void open(char *file, char *arguments)
{
SHELLEXECUTEINFO ExecuteInfo;    
memset(&ExecuteInfo, 0, sizeof(ExecuteInfo));
     
ExecuteInfo.cbSize       = sizeof(ExecuteInfo);
ExecuteInfo.fMask        = 0;                
ExecuteInfo.hwnd         = 0;                
ExecuteInfo.lpVerb       = "open";                      
ExecuteInfo.lpFile       = file;
ExecuteInfo.lpParameters = arguments;
ExecuteInfo.lpDirectory  = 0;
ExecuteInfo.nShow        = SW_SHOW;
ExecuteInfo.hInstApp     = 0;    
if(ShellExecuteEx(&ExecuteInfo) == FALSE)
{
// erreur
}
}
 
int main()
{
 char path[MAX_PATH];
 GetChemin(path, MAX_PATH);
 int countpath=0;
 for (const char* cur = path; *cur != '\0'; cur++)
 {
  countpath++;
 }
 char fullpath[MAX_PATH];
 GetChemin(fullpath, MAX_PATH);
 fullpath[countpath]='\\';
 fullpath[countpath+1]='a';
 fullpath[countpath+2]='.';
 fullpath[countpath+3]='b';
 fullpath[countpath+4]='a';
 fullpath[countpath+5]='t';
 fullpath[countpath+6]='\0';
 open(fullpath,path);
 cout<<path ;
 return 0;
}
 
Ca a l'air de marcher, mais j'aime pas cette méthode, vous savez si y'a pas un autre moyen ? (par le batch bien sur)
Et bien sur, si quelqu'un a quelques remarques/améliorations sur mon code, ce serait sympa =)

Reply

Marsh Posté le 13-07-2005 à 19:02:27    

michel123 a écrit :

Bonjour,
 
J'ai un problème plutôt ennuyeux : mes batchs ms dos ne se lancent pas correctement en réseau, en fait le problème c'est que le repertoire par défault n'est plus celle où se trouve le fichier parce que la commande CD ne supporte pas les euh... chemins unc ("CMD does not support UNC paths as current directories." ).
 
Donc pour pallier ce problème j'ai trouver une astuce : en utilisant pushd qui lui le supporte. MAIS comment faire pour mettre une ligne avec pushd dans un fichier bat sachant que dès le lancement de celui-ci, je perds le chemin du dossier où se trouvais le fichier ?
 
Voilà, j'espère que j'ai été clair, sinon demandez moi de réexpliquer. Merci d'avance.


 
La question est : Pourquoi as tu besoin de garder le chemin d'ou est lancé le batch ?
La pluspart du temps, je dirais par convention en fait, les batch dos (quand il s'agit de batch de connexion) sont copiés en local avant l'execution.
En clair dis nous exactement ce que tu veux faire, on pourra p-e mieux t'aider.


---------------
Les hommes n'acceptent le changement que dans la nécessité et ils ne voient la nécessité que dans la crise.
Reply

Marsh Posté le 13-07-2005 à 19:02:27   

Reply

Marsh Posté le 13-07-2005 à 19:17:44    

Je sais pas trop ce que tu entends par batch de connexion, mais je préfère ne pas copier les fichiers en local. En fait mon batch sert à  mettre à jour XP au lieu de passer par windows update (je sais qu'il existe des programmes du genre SUS mais ça marche que pour les patch critiques et certains sont payants, en plus c'est pour un particulier, pas une entreprise).
 
Donc ces batchs sont lancé après une installation XP, par le réseau. Mais il y a pas que ça, il y a aussi des applications qu'on peut installer par ce batch (winrar...), donc on doit aussi pouvoir le lancer par doubleclik

Reply

Marsh Posté le 13-07-2005 à 19:27:07    

Ca repond pas tjrs pas a ma question, pkoi t'as besoin de connaitre le chemin d'ou est lance le batch ?
Tu peux pas mettre ce chemin dans une variable au demarrage du script ?
 
SET monchemin="\\serveur\share\mes patchs"


---------------
Les hommes n'acceptent le changement que dans la nécessité et ils ne voient la nécessité que dans la crise.
Reply

Marsh Posté le 13-07-2005 à 20:29:05    

Ah oui, c'est pour faire un pushd %chemin%. Bien sur je peux mettre ce chemin dans le bat mais pour faire plus portable je le mets pas

Reply

Marsh Posté le 13-07-2005 à 21:20:03    

et tout bêtement créer un lecteur réseau, ce serait pas plus simple ?   :D

Reply

Marsh Posté le 13-07-2005 à 21:29:32    

En faisant "Connecter un lecteur réseau..." ? Ben c'est mieux si c'était automatique dès le lancement du batch ! (a propos, pushd créer aussi un lecteur réseau dès qu'il détecte un chemin réseau)

Reply

Marsh Posté le 13-07-2005 à 21:31:39    

michel123 a écrit :

Ah oui, c'est pour faire un pushd %chemin%. Bien sur je peux mettre ce chemin dans le bat mais pour faire plus portable je le mets pas


 
le fait de definir tes variables en debut de script ne gene en rien la portabilité justement, bien au contraire ...


---------------
Les hommes n'acceptent le changement que dans la nécessité et ils ne voient la nécessité que dans la crise.
Reply

Marsh Posté le 13-07-2005 à 21:34:43    

t'utilise "net use"  ou "subst" :o

Reply

Marsh Posté le 13-07-2005 à 21:54:51    

Ah, pour subst je connais, pour net use, après quelques recherches sur google je crois qu'il fait la même chose que subst... Mais c'est aussi la même chose que pushd ! (sisi)
 
De toute façon, mon problème c'est de faire en sorte que le batch se créer automatiquement un lecteur réseau dès qu'il démarre, pushd remplit bien son rôle sauf que je n'ai rien à mettre après pushd (c'est dit au début du post pourquoi)
 
Après, j'ai pu faire un exe qui lui contient le chemin qu'il transmet, mais c'est tout moche franchement de passer par un exe, mais si c'est le seul moyen...

Reply

Marsh Posté le 13-07-2005 à 22:06:55    

arf j'avais pas pigé ce que faisait pushd, au temps pour moi :D

Reply

Marsh Posté le 13-07-2005 à 22:18:01    

C'est rien =)

Reply

Marsh Posté le 15-07-2005 à 10:40:11    

Je crois avoir compris ton pb tu cherche a executer ton script via les favories reseau est il est placé dans netlogon vue la tete de ton MSG d'erreur!
1. Il marche ton batch au démarrage de wind?
2. si tu veut k il marche par double cliqu faut le mettre ailleur: sur un partage reseau!
Plus d'info si j'ai rien compris!
Parceque se que tu veut faire doit marché par script sans te casser la tete avec du C++!

Reply

Marsh Posté le 15-07-2005 à 11:03:50    

netlogon ? Euh mon batch est dans le dossier partagé de xp, "C:\Documents and Settings\All Users\Documents", et que veux tu dire par "au démarrage de windows" ? Et le partage réseau, c'est bien la ou j'ai mis mes batchs non ?

Reply

Marsh Posté le 15-07-2005 à 11:08:52    

Tu veut dir que tu n a pas de serveur NT 2000 ou 2003?
Et bien c'est different si tu n a pas de serveur!

Reply

Marsh Posté le 15-07-2005 à 11:14:11    

Euh, attends, c'est pas pour une entreprise, c'est pour moi, un particulier ! Donc pas de serveur, désolé si je te l'ai pas dis

Reply

Marsh Posté le 15-07-2005 à 11:17:14    

Pour executer ton script DOS tu a coller dans le Autoexec.bat
un truc du style start monscript.bat et par exemple copier ton script sous la racine C:\?

Reply

Marsh Posté le 15-07-2005 à 11:18:01    

Ou tu a utiliser GPEDIT.msc et dans script de démarrage tu a mis ton script?

Reply

Marsh Posté le 15-07-2005 à 11:30:35    

Si tu le lance via le autoexec et bien creer un script qui copiera une ligne dans le autoexec qui démarrera ton script du style:
exbatch:
@echo off
echo start monscript.bat>>C:\AUTOEXEC.bat
copy monscript.bat C:\monscript.bat
 
par exemple sa va copier ton script sous le C: et le lancera a chaque démarrage via l'autoexec.bat!
Sinon tu peu aussi le copier dans Démarrage sa marche aussi!

Reply

Marsh Posté le 15-07-2005 à 11:48:08    

Non, je le lance pas de autoexec.bat, enfin je comprends pas ton idée, tu veux que je copie mon batch dans c: et que je le lance de la ? Mais pour que ça marche il aurait fallu que je copie tout le reste des fichiers qui va avec (c'est pas un batch seul en fait, mais avec des updates à installer)
 
Bref, c'est pas trop grave, j'ai quand même réussi à créer un programme en c++ qui arrange tout, donc je vais l'utiliser.
 
Merci à vous tous pour vos réponses, et plus particulièrement à Sm@No =)
 
A+

Reply

Marsh Posté le 15-07-2005 à 14:55:46    

michel123 a écrit :

Non, je le lance pas de autoexec.bat, enfin je comprends pas ton idée, tu veux que je copie mon batch dans c: et que je le lance de la ? Mais pour que ça marche il aurait fallu que je copie tout le reste des fichiers qui va avec (c'est pas un batch seul en fait, mais avec des updates à installer)
 
Bref, c'est pas trop grave, j'ai quand même réussi à créer un programme en c++ qui arrange tout, donc je vais l'utiliser.
 
Merci à vous tous pour vos réponses, et plus particulièrement à Sm@No =)
 
A+


 
 
il serait bcp plus viable pour toi de mettre le chemin dont tu as besoin dans une variable en tete de script, et ce serait bcp plus portable qu'un executable compilé qui ne marchera p-e pas sur tous les environnements, mais bon tu fais comme tu veux.


---------------
Les hommes n'acceptent le changement que dans la nécessité et ils ne voient la nécessité que dans la crise.
Reply

Marsh Posté le 19-07-2005 à 10:09:22    

ca part dans tous les sens!
 
Pour répondre au besoin, comme le dit Latex_, net use:
 
net use g: \\Pc2\Documents
 
ensuite tu travailles sur g:
 
et a la fin du batch:
net use g: /d

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed