Como eu incluo um número dinâmico de espaços no final de uma string em um arquivo de lote

4

Eu quero enviar informações para um arquivo de log como tal

01/08/2013 14:30 - Dynamic-Machine-Name    - Message starts
02/08/2013 07:12 - DynamicMachineName      - Log entry
02/08/2013 07:14 - Dynamic-PC-Name         - Information here
02/08/2013 08:01 - PC-Name                 - Execution continues
03/08/2013 09:00 - Dynamic-Name            - Message starts
03/08/2013 15:29 - Dynamic-Machine-Name    - Log information
03/08/2013 15:30 - Random-Machine-Name     - Message etc.

Mas, para alinhar a mensagem de log no lado direito, preciso calcular o comprimento do nome da máquina, o que fiz, e deduzi-lo do comprimento máximo para obter um número de espaços.

O que eu não consigo descobrir é como produzir uma string que contenha 'x' número de espaços, ou acrescentar aqueles 'x' números de espaços ao final do nome da máquina?

    
por Ghandi Manning 08.08.2013 / 19:01

1 resposta

6

Você não precisa nem calcular o tamanho do nome da sua máquina. Você só precisa saber quantos caracteres deseja antes da sua mensagem.

Digamos que você queira que sua mensagem inicie na posição 44. Você já tem sua data e hora e as strings de nome da sua máquina. O timestamp tem largura constante, mas a largura do nome da máquina varia.

Crie uma variável que tenha seu timestamp, seguido pelo nome da sua máquina, seguido por 43 espaços. Em seguida, pegue uma substring do resultado, preservando apenas os primeiros 43 caracteres e anexe sua mensagem.

@echo off
setlocal
set "spaces=                                           "
set "timestamp=01/08/2013 14:30"
set "machineName=PC-Name"
set "message=Message goes here"
set "line=%timestamp% - %machineName%%spaces%"
set "line=%line:~0,43%- %message%
echo %line%

- OUTPUT -

01/08/2013 14:30 - PC-Name                 - Message goes here

Para obter mais informações sobre operações de substring variável (e também pesquisar e substituir), digite HELP SET ou SET /? em um prompt de comando.

    
por 08.08.2013 / 23:59