La Force d'un SCRIPT à exécuter à l'aide de cscript au lieu de wscript
Quel est le stackoverflow approuvé (et donc de corriger les) méthode pour forcer un VBS pour exécuter à l'aide de cscript au lieu de wscript - indépendamment de ce que l'utilisateur tente?
Une rapide recherche sur Google montre beaucoup d'exemples, mais certains d'entre eux n'ont tout simplement pas travailler et ceux qui ne le sont souvent de ne pas gérer le fait qu'il peut avoir été exécuté avec des arguments, donc je suis curieux de savoir quelle est la meilleure façon est.
Ici est un exemple qui ne gère pas les arguments:
sExecutable = LCase(Mid(Wscript.FullName, InstrRev(Wscript.FullName,"\")+1))
If sExecutable <> "cscript.exe" Then
Set oShell = CreateObject("wscript.shell")
oShell.Run "cscript.exe """ & Wscript.ScriptFullName & """"
Wscript.Quit
End If
J'apprécie le fait que cela pourrait probablement être facilement modifié pour gérer des arguments, mais de réaliser que cela peut ne pas être la meilleure façon d'aborder le problème.
Contexte: je suis en train d'écrire un script qui permet d'exécuter en double-cliquant ou (plus probable) soit à partir d'un fichier batch DOS ou en tant que tâche planifiée. Il peut contenir un ou plusieurs facultatif arguments de ligne de commande.
sonne comme une réponse pour moi, pas un commentaire.
Semble que vous avez répondu sur votre propre, je viens de le confirmer.
Vous avez raison, mais je me demandais si l'ensemble de la démarche de recherche à Wscript.Nom complet de cette manière était la meilleure chose à faire. Ou pour citer Perl, il n'y a plus d'une façon de le faire ... et peut-être la mienne n'est pas le meilleur?
Je ne peux pas penser à une autre façon de le faire.
OriginalL'auteur Richard | 2011-01-14
Vous devez vous connecter pour publier un commentaire.
Mon Seigneur, que pure foutaise. Il me fait pleurer de voir de telles cruddy de codage (n'en déplaise à personne, lol). Sérieusement, si, voici mes 2 centimes:
Il traite les arguments, ET des contrôles pour les espaces en dit arguments -- de sorte que dans le cas d'un nom de fichier passé au script d'origine de l'instance qui contenait des espaces, il ne serait pas obtenir "segmentées" lorsqu'il est passé à cscript.exe.
Seule chose qu'il n'a pas fait de test pour l'entrée standard (par exemple, dans le cas où quelqu'un les canalisations de quelque chose pour le script via la ligne de commande, mais vous avez oublié d'utiliser "cscript script.vbs") - mais si elle a été exécutée par WScript.exe, WScript.StdIn méthodes retournent toutes erreurs de descripteur non Valide, donc il n'y a aucun moyen de tester ça de toute façon.
Hésitez pas à me faire savoir si il existe un moyen de "casser"; je suis prêt à l'améliorer si nécessaire.
//nologo
et se souvient bien sur le test de l'espace (et puis en y ajoutant les guillemets) pour chaque argument.La ligne CreateObject manque un espace entre le nom du script et les arguments. Ainsi, la commande échoue. Pour corriger, modifier
WScript.ScriptFullName & """" & Str
àWScript.ScriptFullName & """ " & Str
.Pour info: j'ai édité le script à inclure l'espace / ajouter des sauts de ligne pour afficher le code de meilleure qualité sur le site. Cependant, je viens de réaliser que l'espace n'est pas disparus au cours de la boucle for espaces sont préfixés sur tous les arguments. Ainsi de séparer les arguments de l'un à l'autre, la première de ces sépare le nom du script.
OriginalL'auteur
Deux petits ajouts à forceCScriptExecution permettez-moi de voir de sa Fenêtre après la résiliation et la gestion de son code de retour.
Notes: "cmd /k" laisser windows séjour après l'exécution. Le paramètre "1" active la fenêtre. Le paramètre "true" attend la fin, de sorte que la variable "ret" peut renvoyer le code d'erreur.
OriginalL'auteur
Voici un semblable, dans le JScript pour faire .fichiers js exécuter dans CScript:
https://gist.github.com/4482361
OriginalL'auteur
Une approche pourrait être de donner une autre extension au lieu de .vbs. Dire .cvbs par exemple. Associer .cvbs avec cscript.exe pas wscript.exe, de cette façon, l'exécution ou double-cliquant sur un .cvbs fichier ne pourra jamais invoquer la wscript.exe.
OriginalL'auteur
Voici mon extrait de code que j'utilise pour certains de mes scripts. Il traite les Arguments ainsi. Tout ce que vous avez à faire est de remplacer les {EnterWorC} avec un "w" ou "c" AVEC des citations
Ici, vous aurez à remplacer le 2e ligne (2e ligne NON vide)
Pour Wscript:
WorC="W"
Pour CScript:
WorC="C"
Il n'est PAS Sensible à la casse.
OriginalL'auteur