Препроцессор для добавления функциональности в CMD Windows? - PullRequest
0 голосов
/ 16 февраля 2010

Мне нужно сделать немало скриптов в моей работе в качестве администратора базы данных SQL Server. Иногда мне нужно развернуть сценарий исправления в очень ограниченной среде, где единственным вариантом для сценариев может быть DOS Batch. В одной такой среде даже VBScript / WSH не возможен, не говоря уже о PowerShell. Любой, кто написал достаточно пакетных файлов для DOS и Windows, знает, что он очень ограничен и имеет огромную PIA, когда нужно делать что-то слишком сложное. Это особенно верно для людей, которые работали со сценариями оболочки Unix, Perl, Tcl, Python, Ruby и т. Д.

Возможное решение этой проблемы - препроцессор CMD, который добавил бы некоторые полезные функции из более функциональных языков сценариев. Я пытался найти такую ​​утилиту, но пока мне не повезло.

Что в конечном итоге приводит к моему вопросу: кто-нибудь знает о таком препроцессоре CMD? Если нет, какую функциональность вы бы хотели видеть в одном?


Добавление:
Если вы не знакомы с идеей препроцессора, см. эту запись в Википедии .

Чтобы уточнить, я имею в виду инструмент, который бы добавил функции, такие как:

  1. Функции
  2. Backtick (`) ala Unix shell

... и, возможно, другие. Это две функции, которые я хотел бы иметь в CMD, и могу придумать, как реализовать их с помощью препроцессора CMD. Функции могут быть реализованы с помощью env vars и GOTO / меток; отступает, отправляя по трубопроводу во временный файл и используя set / p = <для чтения результата в env var. </p>

Вы уже можете достичь этих же целей, но это становится очень утомительным и многословным - вот как я пришел к мысли, что препроцессор будет обрабатывать шаблон для таких функций.

Пример * ** 1029 тысяча двадцать-восемь * На примере обратных галочек приведен пример необработанного кода из моего гипотетического Batch ++ и обработанного сценария vanilla batch, готового к запуску CMD.exe:

Пакетный источник ++ (test.batpp)

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

Запустите его через препроцессор

bpp test.batpp > post_test.bat

Результирующий код CMD / 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

1 Ответ

0 голосов
/ 16 февраля 2010

Я не уверен, что правильно истолковал ваш вопрос. Если вы работаете в контролируемой среде, которая не позволяет запускать какие-либо расширения сценариев, как вы собираетесь получить доступ к такому препроцессору?

Однако, что касается двух запрашиваемых вами функций, вы согласны с .BAT. Обе функции поддерживаются обработкой BAT в текущих версиях Windows.

  1. Функции: у вас есть расширенный синтаксис CALL, который поддерживает передачу параметров через ссылки на аргументы% 1 ..% 9, и расширен за счет подстановки расширения с использованием синтаксиса %~. Читать HELP CALL.

  2. Backtick: не уверен, что вы хотите, но в команде FOR /F вы можете передать строку с обратным каналом для запуска и захват ее вывода. Читать HELP FOR.

...