¿Cómo agrego un número dinámico de espacios al final de una cadena en un archivo por lotes?


5

Quiero enviar información a un archivo de registro 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.

Pero para alinear el mensaje de registro en el lado derecho, necesito calcular la longitud del nombre de la máquina, lo que hice, y deducirlo de la longitud máxima para obtener un número de espacios.

Lo que no puedo resolver es cómo producir una cadena que contenga 'x' número de espacios, o agregar esos 'x' números de espacios al final del nombre de la máquina.


Estúpido, estaba pensando BASH, perdón por eso ... Ya no uso mucho Windows para tener un batch/dos/powershellequivalente. Estoy seguro de que alguien llegará pronto.
nerdwaller

Está bien, no sabrías el DOSequivalente, ¿verdad?
Ghandi Manning

1
¿Está buscando específicamente DOS o el lenguaje cmd.exe de Windows?
Grawity

No estoy seguro de la diferencia, básicamente corriendo myfile.batasí que cualquier cosa que se ejecuta, podría muy bien ser el lenguaje cmd.exe
Gandhi Manning

Respuestas:


6

Ni siquiera tiene que calcular la longitud del nombre de su máquina. Solo necesita saber cuántos caracteres quiere antes de su mensaje.

Digamos que desea que su mensaje comience en la posición 44. Ya tiene su marca de tiempo y las cadenas de nombre de su máquina. La marca de tiempo es de ancho constante, pero el ancho del nombre de la máquina varía.

Cree una variable que tenga su marca de tiempo, seguida del nombre de su máquina, seguido de 43 espacios. Luego tome una subcadena del resultado, conservando solo los primeros 43 caracteres, y agregue su mensaje.

@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%

- SALIDA -

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

Para obtener más información sobre las operaciones de subcadena variable (y también buscar y reemplazar), escriba HELP SETo SET /?desde un símbolo del sistema.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.