/ / Batch aggiungendo un carattere ogni x caratteri - windows, string, batch-file

Batch aggiungendo un carattere ogni x caratteri - windows, string, batch-file

Se ottengo il mio parametro con% 1 ed è "Server", come posso aggiungere un segno + dopo ogni lettera? Quindi il mio risultato sarebbe "S + e + r + v + e + r"?

credo File batch per aggiungere caratteri all'inizio e alla fine di ogni riga nel file txt questa è una domanda simile ma non so come cambiare il codice per questo scopo.

Qualsiasi aiuto sarebbe grande!

risposte:

3 per risposta № 1

Sono abbastanza sicuro che questo sia stato chiesto e risposto prima, ma non riuscivo a trovarlo.

C'è una soluzione davvero interessante (e veloce) che iovisto pubblicato da qualche parte. Usa un nuovo processo cmd.exe con l'opzione / U in modo che l'output sia in unicode. La cosa interessante dell'unicode è che ogni carattere ASCII è rappresentato come se stesso seguito da un byte nul (0x00). Quando viene convogliato su MORE, converte i byte nul in newlines !. Quindi viene utilizzato un FOR / F per iterare ciascuno dei caratteri e creare la stringa desiderata. Un'operazione di sottostringa finale viene utilizzata per rimuovere l'extra + dal fronte.

Ho modificato leggermente il mio ricordo del codice, giocandogiochi con sequenze di escape per far sì che l'espansione ritardata si verifichi al momento giusto e per proteggere il personaggio quando viene aggiunto - tutto per ottenere la tecnica di preservare ^ e ! personaggi. Questa potrebbe essere una novità per i codici pubblicati esistenti che utilizzano questa tecnica generale.

@echo off
setlocal enableDelayedExpansion
set "str=Server bang^! caret^^"
set "out="
for /f delims^=^ eol^= %%A in ("cmd /u /v:on /c echo(^^!str^^!^|more") do set "out=!out!+^%%A"
set "out=!out:~1!"
echo Before: !str!
echo  After: !out!

--PRODUZIONE---

Before: Server bang! caret^
After: S+e+r+v+e+r+ +b+a+n+g+!+ +c+a+r+e+t+^

3 per risposta № 2

Questo file batch dovrebbe farlo:

@ECHO OFF
SETLOCAL EnableDelayedExpansion

SET Text=%~1
SET Return=

REM Batch files don"t have a LEN function.
REM So this loop will process up to 100 chars by doing a substring on each.
FOR /L %%I IN (0,1,100) DO (
CALL SET Letter=!Text:~%%I,1!
REM Only process when a letter is returned.
IF NOT "!Letter!" == "" (
SET Return=!Return!+!Letter!
) ELSE (
REM Otherwise, we have reached the end.
GOTO DoneProcessing
)
)

:DoneProcessing
REM Remove leading char.
SET Return=%Return:~1,999%

ECHO %Return%

ENDLOCAL

Chiamare con Test.bat Server stampe S+e+r+v+e+r alla console.