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 № 1Sono 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.