O Windows Batch (CMD) é provavelmente o idioma menos adequado para o golfe com código.
Evite caracteres de nova linha . Se você estiver procurando pelo código mais curto em bytes, em vez de caracteres, desejará se livrar de todos os retornos de carro desnecessários (caracteres de nova linha = 2 bytes). Você pode usar a &
operação para fazer isso, aparando um byte para cada comando.
echo Hello&echo World.
Definindo variáveis . Ao definir variáveis usando opções, o set
analisador ignorará os espaços.
set /a a+=1
set /p b="User Input: "
:: Will be handled the same as..
set/aa+=1
set/pb="User Input: "
Observe que as mesmas regras do analisador não se aplicam a todos os comandos - como um exemplo, pois os loops requerem espaços. Exceto entre set, string, or command
(ou seja, o que está dentro dos colchetes) e a palavra do
.
for /f %%a in (file.txt)do ...
Expressões matemáticas simples . Além disso, observe a expressão que eu usei para incrementar no set /a
comando. Para expressões matemáticas simples, use em += -= *= /=
vez de (por exemplo) set /a a=%a%+1
.
Reunindo saída de comando . Para obter a saída de um comando, às vezes pode ser útil enviar e ler um arquivo, onde você poderia ter usado um loop for para reunir a saída:
for /f %%a in ('echo test') do set a=%%a
:: Can be shortened to
echo test>f&set/pa=<f
echo test
envie stdout para um arquivo chamado f, >f
inicie um novo comando &
e obtenha o conteúdo do arquivo em uma variável set/pa=<f
. Obviamente, isso nem sempre é útil. Mas pode ser quando tudo que você precisa é de uma única linha de saída.
Saída de comando . Ao suprimir a saída do comando, use @
antes dos comandos, a menos que você precise suprimir mais de 9 comandos; nesse caso, use @echo off
no início do seu script. @echo off
tem 9 bytes de comprimento e, portanto, geralmente salva mais bytes com scripts mais longos.
Os comandos geralmente fazem mais do que apenas o óbvio - pense no que seus comandos estão fazendo. Por exemplo; se você precisar definir uma variável e repetir outra variável, em vez de:
set a=OUTPUT
echo %a%
echo test>f
set /p b=<f
Você pode usar o comando set com a /p
opção de saída %a%
para você.
set a=OUTPUT
echo test>f
set /p b=%a%<f
Completamente jogado ...
set a=OUTPUT&echo test>f&set/pb=%a%<f
Um par de exemplos - Contagem da soma de todos os dígitos - conjectura de Goldbach .
Quaisquer outras dicas são mais do que apreciadas - continuarei atualizando isso se pensar em outra coisa.