Боже… Это похоже на сравнение функционального и процедурного программирования. Но если голосовать, то однозначный победитель — @rextended. Версия @elico приемлема, если ему такой стиль нравится. Но она просто неэффективна и неаккуратна, если выбирать по качеству.
Несколько замечаний:
1. Использование on-error= для защиты [remove] вполне разумно — например, файл может закрыться между find и remove из-за плохого тайминга.
2. Перевод строки — это вполне валидный разделитель команд. Точки с запятой не нужны, так что их можно считать лишними символами для обработки, особенно если стремишься к максимальной эффективности (ведь тогда получается два разделителя: ; и \n).
Особенность подхода @rextended с использованием «конвейера вывода» (моё название, у некоторых скриптов нет конкретных терминов) — здесь больше функционального программирования — выделяется особенно ярко. Обратите внимание, что сама команда print вызывает cmd во время итерации, и при этом «цикл» явно не нужен. Можно добавить «as-value», чтобы привести вывод в необходимый вид.
Не знаю, но, думаю, remove всё равно может не сработать, так что можно добавить опцию «:retry» (которая будет пытаться выполнить заново при ошибке). Например, в сравнении с :while циклом, который теоретически может работать бесконечно при постоянных ошибках, хоть это и маловероятно.