2010-02-16 8 views
0

J'ai besoin de faire un peu de script dans mon travail en tant que DBA SQL Server. Parfois, j'ai besoin de déployer un script de correction dans un environnement très restreint, où la seule option pour les scripts peut être DOS Batch. Dans un tel environnement, même VBScript/WSH n'est pas une possibilité, encore moins PowerShell. Quiconque a écrit suffisamment de fichiers de commandes sous DOS et Windows sait que c'est très limité et qu'il y a un PIA énorme quand vous avez besoin de faire quelque chose de trop compliqué. Ceci est particulièrement vrai pour les personnes qui ont travaillé avec les scripts shell Unix, Perl, Tcl, Python, Ruby, etc.Préprocesseur pour ajouter des fonctionnalités au CMD de Windows?

Une solution possible à cela serait un préprocesseur CMD qui ajouterait certaines des fonctionnalités utiles d'un script plus performant langues. J'ai essayé de trouver un tel utilitaire, mais jusqu'ici je n'ai pas eu de chance. Ce qui conduit finalement à ma question: est-ce que quelqu'un est au courant d'un tel préprocesseur CMD? Si non, quelle fonctionnalité aimeriez-vous voir dans un?


Addendum:
Si vous n'êtes pas familier avec l'idée d'un préprocesseur voir this Wikipedia entry.

Pour clarifier les choses, je pense à un outil qui ajouterait des fonctionnalités telles que:

  1. Fonctions
  2. Backtick (`) ala Unix shell

... et peut-être d'autres. Ce sont deux fonctionnalités que j'ai souhaité à CMD et que je peux imaginer un moyen de les implémenter avec un préprocesseur CMD. Les fonctions pourraient être mises en œuvre avec env vars et GOTO/labels; les backticks en redirigeant vers un fichier temporaire et en utilisant set/p = < pour lire le résultat dans une var env.

Vous pouvez déjà atteindre ces mêmes objectifs, mais cela devient très fastidieux et prolixe, et c'est ainsi que je suis arrivé à l'idée d'avoir un préprocesseur pour gérer ce genre de fonctionnalités.

Exemple

En utilisant l'exemple de contre-apostrophes, voici un exemple de code non traité de mon hypothétique lot ++ et traité script batch de vanille, prêt à être exécuté par CMD.exe:

lot ++ Source (test.batpp)

copy `dir /b /s c:\ | find "CADR-README.htm"` \\srv01\users 

courir par le préprocesseur

bpp test.batpp > post_test.bat 

résultant CMD/code BAT (post_test.bat)

dir /b /s c:\ | find "CADR-README.htm" > _bt001.tmp 
set /p _BT001 =< _bt001.tmp 
copy %_BT001% \\srv01\users 
set _BT001= 
del _bt001.tmp 

Répondre

0

Je ne suis pas sûr d'interpréter correctement votre question. Si vous exécutez dans un environnement contrôlé qui ne vous permet pas d'exécuter une extension de script, comment allez-vous accéder à un tel préprocesseur?

Toutefois, et en ce qui concerne les deux fonctionnalités que vous demandez, vous êtes OK avec .BATs. Les deux fonctionnalités sont prises en charge par le traitement BAT dans les versions actuelles de Windows.

  1. Fonctions: vous avez la syntaxe étendue CALL, qui prend en charge le passage de paramètres à travers des références argument% 1% 9 .. et améliorée avec une substitution d'extension en utilisant la syntaxe %~. Lire HELP CALL. Backtick: vous ne savez pas exactement ce que vous voulez mais, dans la commande FOR /F, vous pouvez passer une chaîne rétrécie à exécuter et sa sortie capturée. Lisez HELP FOR.

+0

Si vous n'êtes pas familier avec l'idée d'un préprocesseur voir cette entrée Wikipedia: http://en.wikipedia.org/wiki/Preprocessor env déploiement restrictive est précisément la raison pour laquelle un préprocesseur est venu à l'esprit. Sur ma propre machine, je pourrais écrire des scripts dans ce CMD ++, qui incl. nouvelle fonctionnalité et syntaxe du sucre. Pour le déploiement, je l'utiliserais comme n'importe quel autre préprocesseur: exécutez la source CMD ++ à travers le préprocesseur, qui produit du code CMD à la vanille. Pour une description de ce que fait le backtick, voir: http://learnlinux.tsf.org.za/courses/build/shell-scripting/ch05s04.html – Aaron

+0

Certains des préprocesseurs que je connais aboutissent au code .EXE, que vous ne pourrez pas non plus exécuter. Pas un qui résulte en .BAT que je connais. J'espère que quelqu'un ici à SO peut aider. En ce qui concerne le backtick, je crois que FOR/F fait exactement ce dont vous avez besoin. Essayez 'FOR/F% A IN ('date/t') FAIRE ECHO% A'' –

Questions connexes