web-dev-qa-db-fra.com

Comment exécuter VBScript en ligne de commande sans Cscript / Wscript

Je suis un débutant dans VBScript. Je l'ai googlé et j'ai appris que nous pouvons exécuter VBScript à partir de la ligne de commande en exécutant la commande ci-dessous:

Par exemple, mon nom vbscript est Converter.vbs & il est présent dans le dossier D:\VBS.

Je peux l'exécuter avec les méthodes suivantes:

CScript "D:\VBS\Converter.vbs"

OR

WScript "D:\VBS\Converter.vbs"

Maintenant, j'aimerais exécuter la commande ci-dessus VBScriptsansCscript ou Wscript en tapant simplement le nom du nom VBscript i.e. Converter.

Je ne veux pas spécifier le chemin complet de VBSCRIPT à chaque fois.

Quelqu'un peut-il s'il vous plaît me guider sur la façon de le faire?

13
Solution Seeker

Je diviserai cela en plusieurs parties distinctes, chaque partie pouvant être réalisée individuellement. (Je vois la réponse similaire, mais je vais donner une explication plus détaillée ici ..)

Première partie , afin d'éviter de taper "CScript" (ou "WScript"), vous devez indiquer à Windows comment lancer un fichier de script * .vbs. . Dans My Windows 8 (je ne peux pas être sûr que toutes ces commandes fonctionnent exactement comme indiqué ici dans les versions antérieures de Windows, mais le processus est identique, même si vous devez légèrement modifier les commandes), ouvrez une fenêtre de console (aka "invite de commande", ou aka [incorrectement] "dos Prompt") et tapez " assoc .vbs". Cela devrait donner lieu à une réponse telle que:

C:\Windows\System32>assoc .vbs
.vbs=VBSFile

En utilisant cela, vous tapez ensuite " ftype VBSFile", ce qui devrait donner une réponse de:

C:\Windows\System32>ftype VBSFile
vbsfile="%SystemRoot%\System32\WScript.exe" "%1" %*

-OU-

C:\Windows\System32>ftype VBSFile
vbsfile="%SystemRoot%\System32\CScript.exe" "%1" %*

Si ces deux sont déjà définis comme ci-dessus, votre Windows est déjà configuré pour savoir comment lancer un fichier * .vbs. (BTW, WScript et CScript sont le même programme, mais utilisent des noms différents. WScript lance le script comme s’il s’agissait d’un programme graphique, puis CScript le lance comme s’il s’agissait d’un programme en ligne de commande. Pour plus de détails, consultez les autres sites et/ou documentation. et mises en garde.)

Si l'une des commandes n'a pas répondu comme ci-dessus (ou des réponses similaires, si le type de fichier signalé par assoc et/ou la commande exécutée comme indiqué par ftype ont des noms ou des emplacements différents), vous pouvez les entrer vous-même:

C:\Windows\System32>assoc .vbs=VBSFile

-et/ou-

C:\Windows\System32>ftype vbsfile="%SystemRoot%\System32\WScript.exe" "%1" %*

Vous pouvez également taper " help assoc" ou " help ftype" pour plus d'informations sur ces commandes, qui sont souvent utiles lorsque vous souhaitez exécuter automatiquement certains programmes. en tapant simplement un nom de fichier avec une extension spécifique. (Attention cependant, certaines extensions de fichiers étant spécialement configurées par Windows ou des programmes que vous avez installés pour fonctionner correctement. Vérifiez toujours les valeurs attribuées actuellement par assoc/ftype et sauvegardez-les dans un fichier texte au cas où vous deviez le faire. restaurez-les.)

Deuxième partie , en évitant de saisir l'extension de fichier lors de la saisie de la commande à partir de la fenêtre de la console .. Comprendre comment Windows (et le programme CMD.EXE) trouve les commandes que vous avez Le type est utile pour cette partie (et la suivante). Lorsque vous tapez une commande, utilisons "querty" comme exemple de commande. Le système essaiera d'abord de trouver la commande dans sa liste de commandes interne (via les paramètres du registre de Windows pour le système lui-même ou programmés dans le cas de CMD.EXE). En l'absence d'une telle commande, il essaiera ensuite de la trouver dans la variable d'environnement% PATH% en cours. Dans les anciennes versions de DOS/Windows, CMD.EXE (et/ou COMMAND.COM) ajoutait automatiquement les extensions de fichier ".bat", ".exe", ".com" et éventuellement ".cmd" au nom de commande tapé, sauf si vous avez explicitement tapé une extension (telle que "querty.bat" pour éviter de lancer "querty.exe" par erreur). Dans les versions plus modernes de Windows, les extensions répertoriées dans la variable d’environnement% PATHEXT% seront testées. Donc, tout ce que vous avez à faire est d’ajouter .vbs à% PATHEXT%. Par exemple, voici mon% PATHEXT%:

C:\Windows\System32>set pathext
PATHEXT=.PLX;.PLW;.PL;.BAT;.CMD;.VBS;.COM;.EXE;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY

Notez que les extensions DOIVENT inclure le ".", Sont séparées par ";" et que .VBS est répertorié APRÈS .CMD, mais AVANT .COM. Cela signifie que si le processeur de commandes (CMD.EXE) trouve plusieurs correspondances, il utilisera la première répertoriée. C'est-à-dire que si j'ai query.cmd, querty.vbs et querty.com, il utilisera querty.cmd.

Maintenant, si vous voulez le faire tout le temps sans avoir à continuer à configurer% PATHEXT%, vous devrez modifier l'environnement système. En le tapant dans une fenêtre de console, vous ne le modifiez que pour cette session. Je laisserai ce processus comme un exercice pour le lecteur. :-P

Troisième partie , exécuter le script sans toujours saisir le chemin complet. Cette partie, en relation avec la deuxième partie, existe depuis l’époque du DOS. Assurez-vous simplement que le fichier se trouve dans l’un des répertoires (dossiers, pour votre peuple Windows!) Répertoriés dans la variable d’environnement% PATH%. Ma suggestion est de créer votre propre répertoire pour stocker les divers fichiers et programmes que vous créez ou utilisez souvent à partir de la fenêtre de la console/Invite de commande ( C'est-à-dire, ne vous inquiétez pas de cette opération pour les programmes que vous exécutez depuis le menu Démarrer ou toute autre méthode .. uniquement avec la fenêtre de la console. Ne jouez pas avec les programmes installés par Windows ou un autre installateur automatisé à moins que vous ne sachiez ce que vous faites).

Personnellement, je crée toujours un répertoire "C:\sys\bat" pour les fichiers de commandes, un répertoire "C:\sys\bin" pour les fichiers * .exe et * .com (par exemple, si vous téléchargez quelque chose comme "md5sum" , un utilitaire de somme de contrôle MD5), un répertoire "C:\sys\wsh" pour VBScripts (et JScripts, nommé "wsh" car les deux sont exécutés à l'aide du programme "Windows Scripting Host" ou "wsh"), etc. J'ajoute ensuite ces éléments à la variable% PATH de mon système (Panneau de configuration -> Paramètres système avancés -> onglet Avancé -> bouton Variables d'environnement) afin que Windows puisse toujours les rechercher lorsque je les saisis.

La combinaison des trois parties résultera en la configuration de votre système Windows de sorte que, partout où vous pouvez taper une commande de ligne de commande, vous pouvez lancer votre VBScript en tapant simplement c'est le nom du fichier de base. Vous pouvez faire la même chose pour à peu près n'importe quel type de fichier/extension. Comme vous l'avez probablement vu dans ma sortie% PATHEXT%, mon système est configuré pour exécuter les scripts Perl (.PLX; .PLW; .PL) et Python (.PY)). Je mets également "C:\sys\bat; C:\sys\scripts; C:\sys\wsh; C:\sys\bin" au début de mon% PATH% et mets divers fichiers de commandes, fichiers de script, Et cetera, dans ces répertoires, afin que Windows puisse toujours les trouver, ce qui est également utile si vous souhaitez "remplacer" certaines commandes: En plaçant les fichiers * .bat en premier dans le chemin, le système les trouvera avant les fichiers * .exe, Par exemple, le fichier * .bat peut lancer le programme en indiquant le chemin complet du fichier * .exe. Consultez les différents sites de "programmation par fichier" pour plus de détails et d’autres exemples de la puissance de la commande. line .. Ce n'est pas encore mort!)

Une note finale: Vérifiez quelques-uns des autres sites pour des avertissements et des mises en garde divers. Cette question portait sur un script appelé "converter.vbs", qui est dangereusement proche de la commande "convert.exe", qui est un programme Windows permettant de convertir votre disque dur d'un système de fichiers FAT vers un système de fichiers NTFS. écrasez votre disque dur si vous faites une faute de frappe!

D'autre part, en utilisant les techniques ci-dessus, vous pouvez également vous protéger de telles erreurs. En utilisant CONVERT.EXE comme exemple. Renommez-le en "REAL_CONVERT.EXE", puis créez un fichier du type "C:\sys\bat\convert.bat" qui contient:

@ECHO OFF
ECHO !DANGER! !DANGER! !DANGER! !DANGER, WILL ROBINSON!

ECHO This command will convert your hard drive to NTFS! DO YOU REALLY WANT TO DO THIS?!
ECHO PRESS CONTROL-C TO ABORT, otherwise..

REM "PAUSE" will pause the batch file with the message "Press any key to continue...",
REM and also allow the user to press CONTROL-C which will Prompt the user to abort or
REM continue running the batch file.
PAUSE

ECHO Okay, if you're really determined to do this, type this command:
ECHO.    %SystemRoot%\SYSTEM32\REAL_CONVERT.EXE
ECHO to run the real CONVERT.EXE program. Have a Nice day!

Vous pouvez également utiliser CHOICE.EXE dans Windows moderne pour que l'utilisateur saisisse "y" ou "n" s'il souhaite vraiment continuer, et ainsi de suite. Encore une fois, la puissance des fichiers batch (et de script)!

Voici quelques liens vers de bonnes ressources sur la façon d'utiliser tout ce pouvoir:

http://ss64.com/

http://www.computerhope.com/batch.htm

http://commandwindows.com/batch.htm

http://www.robvanderwoude.com/batchfiles.php

La plupart de ces sites sont destinés aux fichiers de commandes, mais la plupart des informations qu’ils contiennent s’appliquent à l’exécution de tout type de fichier de commandes (* .bat), de fichiers de commandes (* .cmd) et de scripts (* .vbs, * .js, * .pl, * .py, etc.).

15
C. M.

Lors de la saisie de la spécification de fichier complète du script ou de son nom de fichier sur la ligne de commande, le shell utilisera des informations accessibles de

assoc | grep -i vbs
.vbs=VBSFile

ftype | grep -i vbs
VBSFile=%SystemRoot%\System32\CScript.exe "%1" %*

pour décider quel programme exécuter pour le script. Dans mon cas, cscript.exe, dans le vôtre, ce sera wscript.exe - cela explique pourquoi votre résultat WScript.Echos se traduit par MsgBoxes.

Comme

cscript /?
Usage: CScript scriptname.extension [option...] [arguments...]

Options:
 //B         Batch mode: Suppresses script errors and prompts from displaying
 //D         Enable Active Debugging
 //E:engine  Use engine for executing script
 //H:CScript Changes the default script Host to CScript.exe
 //H:WScript Changes the default script Host to WScript.exe (default)
 //I         Interactive mode (default, opposite of //B)
 //Job:xxxx  Execute a WSF job
 //Logo      Display logo (default)
 //Nologo    Prevent logo display: No banner will be shown at execution time
 //S         Save current command line options for this user
 //T:nn      Time out in seconds:  Maximum time a script is permitted to run
 //X         Execute script in debugger
 //U         Use Unicode for redirected I/O from the console

montre, vous pouvez utiliser // E et // S pour faire basculer définitivement votre hôte par défaut sur cscript.exe.

Si vous êtes si paresseux que vous ne voulez même pas taper l'extension, assurez-vous que la variable d'environnement PATHEXT

set | grep -i vbs
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.py;.pyw;.tcl;.PSC1

contient .VBS et il n'y a pas de Converter.cmd (qui convertit votre disque dur en machine à laver) dans votre chemin.

Mise à jour du commentaire:

Si vous ne voulez pas spécifier le chemin complet de mon script vbscript à chaque fois, vous pouvez:

  1. placez votre fichier CONVERTER.VBS dans un dossier inclus dans la variable d’environnement PATH; Le shell recherchera alors tous les chemins - en prenant si nécessaire en compte le PATHEXT et les informations de type/assoc - pour trouver un "exécutable" correspondant.
  2. placez CONVERTER.BAT/.CMD dans un répertoire de chemin contenant une ligne comme cscript p:\ath\to\CONVERTER.VBS

Dans les deux je taperais l'extension pour éviter les mauvaises surprises.

9
Ekkehard.Horner

Pourquoi ne stockez-vous pas simplement vbscript dans un fichier hybride batch/vbscript? Nommez le batch converter.bat hybride et vous pouvez l'exécuter directement en tant que convertisseur à partir de la ligne de commande. Bien sûr, vous pouvez utiliser TOUS les scripts par défaut à partir de Cscript ou de Wscript, mais si vous souhaitez exécuter votre vbs en tant que script Windows plutôt que script de console, vous risquez de créer une certaine confusion par la suite. Il suffit donc de définir votre code dans un fichier de commandes et de l’exécuter directement.

Vérifiez la réponse -> Ici

Et voici un exemple:

Converter.bat

::' VBS/Batch Hybrid
::' --- Batch portion ---------
rem^ &@echo off
rem^ &call :'sub
rem^ &exit /b

:'sub
rem^ &echo begin batch
rem^ &cscript //nologo //e:vbscript "%~f0"
rem^ &echo end batch
rem^ &exit /b

'----- VBS portion -----
Dim tester
tester = "Convert data here"
Msgbox tester
4
Rich

Je me demande pourquoi vous ne pouvez pas mettre cela dans un fichier batch. Exemple:

cd D:\VBS\
WSCript Converter.vbs

Placez le code ci-dessus dans un fichier texte et enregistrez-le avec l'extension .bat. Maintenant, vous devez simplement exécuter ce fichier .bat.

4
con_9