Windows Batch (CMD), вероятно, является наименее подходящим языком для игры в гольф кода.
Избегайте новых символов . Если вы ищете самый короткий код в байтах, в отличие от символов, вам нужно избавиться от всех ненужных возвратов каретки (символы новой строки = 2 байта). Для этого вы можете использовать &операцию, обрезая один байт для каждой команды.
echo Hello&echo World.
Установка переменных . При установке переменных с помощью переключателей setпарсер будет игнорировать пробелы.
set /a a+=1
set /p b="User Input: "
:: Will be handled the same as..
set/aa+=1
set/pb="User Input: "
Обратите внимание, что одни и те же правила синтаксического анализа не применяются ко всем командам - например, для циклов требуются пробелы. За исключением между set, string, or command(то есть, что в скобках) и словом do.
for /f %%a in (file.txt)do ...
Простые математические выражения . Также обратите внимание на выражение, которое я использовал для увеличения в set /aкоманде. Для простых математических выражений используйте += -= *= /=вместо (например) set /a a=%a%+1.
Сбор команды вывода . Чтобы получить выходные данные команды, иногда может быть полезно вывести и прочитать файл, где в противном случае вы могли бы использовать цикл for для сбора выходных данных:
for /f %%a in ('echo test') do set a=%%a
:: Can be shortened to
echo test>f&set/pa=<f
echo testотправьте стандартный вывод в файл с именем f, >fзапустите новую команду &и получите содержимое файла в переменной set/pa=<f. Очевидно, это не всегда полезно. Но это может быть, когда все, что вам нужно, это одна строка вывода.
Вывод команды . При подавлении вывода команды используйте @перед командами, если вам не нужно подавить более 9 команд, в этом случае используйте @echo offв начале вашего сценария. @echo offимеет длину 9 байт и, следовательно, обычно сохраняет больше байтов при использовании более длинных сценариев.
Команды часто делают больше, чем просто то, что очевидно - подумайте о том, что делают ваши команды. Например; если вам нужно установить переменную и отобразить другую переменную вместо:
set a=OUTPUT
echo %a%
echo test>f
set /p b=<f
Вы можете использовать команду set с /pпереключателем для вывода %a%за вас.
set a=OUTPUT
echo test>f
set /p b=%a%<f
Полностью в гольф ...
set a=OUTPUT&echo test>f&set/pb=%a%<f
Несколько примеров - подсчитать сумму всех цифр - гипотеза Гольдбаха .
Любые другие советы более чем приветствуются - я буду продолжать обновлять это, если я думаю о чем-либо еще.