Мне нужно сделать немало скриптов в моей работе в качестве администратора базы данных SQL Server. Иногда мне нужно развернуть сценарий исправления в очень ограниченной среде, где единственным вариантом для сценариев может быть DOS Batch. В одной такой среде даже VBScript / WSH не возможен, не говоря уже о PowerShell. Любой, кто написал достаточно пакетных файлов для DOS и Windows, знает, что он очень ограничен и имеет огромную PIA, когда нужно делать что-то слишком сложное. Это особенно верно для людей, которые работали со сценариями оболочки Unix, Perl, Tcl, Python, Ruby и т. Д.
Возможное решение этой проблемы - препроцессор CMD, который добавил бы некоторые полезные функции из более функциональных языков сценариев. Я пытался найти такую утилиту, но пока мне не повезло.
Что в конечном итоге приводит к моему вопросу: кто-нибудь знает о таком препроцессоре CMD? Если нет, какую функциональность вы бы хотели видеть в одном?
Добавление:
Если вы не знакомы с идеей препроцессора, см. эту запись в Википедии .
Чтобы уточнить, я имею в виду инструмент, который бы добавил функции, такие как:
- Функции
- 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