* Есть такая малоизвестная команда DOS -- for. В WinNT её наделили интересной возможностью чтения вывода других команд -- причём более мощной и гибкой, чем оператор `` традиционных *никсовых скриптов. Естественно, об этой возможности сообщает команда for /?, но кто же читает справку?
* Чтобы узнать текущую папку, не нужно изобретать аналог команды cwd=`pwd`. (Кстати, на той странице опечатка: их код следует читать как for /f "delims=" %%i in ('cd') do set cwd=%%i).
Есть способ куда проще: set cwd=%cd%.
Команда set /? выдаёт полную справку о специальных переменных окружения; кроме %cd%, есть ещё шесть других. Но кто же читает справку?
* Команда call поддерживает вызов подпрограмм и передачу им аргументов. Кроме этой возможности, в справке, выводимой по команде call /?, описаны модификаторы аргументов вида %~1; например, батник echo %~p0 выведет свой путь (без названия диска и имени файла).
Но кто же читает справку? В том самом батнике, который мне пришлось переделывать в шелл-скрипт, автор решил реализовать вызов подпрограмм более хитро:
- Код: Выделить всё
if .%1==.sub goto %1%2
...
for %%a in (*.red) do call %0 sub 1 %%a
...
goto end
:sub1
for %%b in (*.red) do call %0 sub 2 %3 %%b
goto end
:sub2
...
По-моему, это очень гибкий и интересный трюк, хотя конкретно в этом случае весь двойной цикл можно было бы записать в одной строчке, а не разбивать на две подпрограммы.
* И в завершение -- 90-байтный whereis(1) от Чена. Этот крохотный батник принимает имя команды (без расширения), и находит в PATH соответствующий ей исполнимый файл:
- Код: Выделить всё
@for %%e in (%PATHEXT%) do @for %%i in (%1%%e) do @if NOT "%%~$PATH:i"=="" echo %%~$PATH:i
И зачем нам при всём этом ещё какая-то Монада?