Estoy tratando de traducir la entrada formateada así: abcd12-34defg y traducirla a esto: ab-cd-12-34-de-fg y usar la salida fija / traducida en el mismo lote para los siguientes comandos como variable

Mi código:

@echo off
setlocal EnableDelayedExpansion

set /p macID="please enter mac id:" 

call :print_token 0 2 -
call :print_token 2 2 -
call :print_token 4 2 -
call :print_token 7 2 -
call :print_token 9 2 -
call :print_token 11 2 

goto :eof

:print_token
echo | set /p dummyVar=!macID:~%1,%2!%3
exit /b 0

Salida de corriente:

please enter mac id: abcd12-34defg    
abcd12-34defg

Gol:

please enter mac id: abcd12-34defg    
ab-cd-12-34-de-fg
....any_future_cmd_command "%my_new_mac_id_from_2nd_line%"

(esto debe mantenerse en "caché" en el lote para los siguientes comandos siguientes, como por ejemplo:)

Netsh dhcp server \ myserver scope myscope | buscar / i "% my_new_mac_id_from_2nd_line%"

Gracias por tu paciencia

2
deschus 31 ago. 2016 a las 16:51

2 respuestas

La mejor respuesta

Así es como se hace ...

@echo off
setlocal EnableDelayedExpansion

set /p macID="please enter mac id:" 
set finalMacID=

call :get_token token %macID% 0 2 -
set finalMacID=%finalMacID%%token%
call :get_token token %macID% 2 2 -
set finalMacID=%finalMacID%%token%
call :get_token token %macID% 4 2 -
set finalMacID=%finalMacID%%token%
call :get_token token %macID% 7 2 -
set finalMacID=%finalMacID%%token%
call :get_token token %macID% 9 2 -
set finalMacID=%finalMacID%%token%
call :get_token token %macID% 11 2 
set finalMacID=%finalMacID%%token%

echo %finalMacID% 
goto :eof

:get_token
set fullString=%2
set %1=!fullString:~%3,%4!%5
exit /b 0

Como te dije en tu publicación anterior, si decides limpiar el macID proporcionado por el usuario, puedes lograr una solución más limpia, ya que puedes poner todas las declaraciones call :add_token_to_variable.... set finalMacID=%finalMacID%%token% en un solo bucle for, haciéndolo más compacto y menos propenso a errores.

Espero que ayude.

1
carlossierra 31 ago. 2016 a las 16:22

Para recopilar todas las partes de una variable, puede cambiar ligeramente su función :print_token a.

:print_token
set "MAC=!MAC!!macID:~%1,%2!%3"
exit /b

Y use set "MAC=" para borrarlo, antes de la primera llamada de su función.

1
jeb 31 ago. 2016 a las 14:14