2014-12-04 3 views
1

Если я получаю свой параметр с% 1, и это «Сервер», как я могу добавить знак + после каждой буквы? Итак, мой результат будет «S + e + r + v + e + r»?Пакетное добавление символа каждые x символов

Я думаю, Batch file to add characters to beginning and end of each line in txt file это аналогичный вопрос, но я не знаю, как изменить код для этой цели.

Любая помощь будет замечательной!

ответ

3

Я уверен, что это было задано и ответили раньше, но я не мог его найти.

Существует действительно крутое (и быстрое) решение, которое я видел где-то где-то. Он использует новый cmd.exe-процесс с опцией/U, поэтому вывод выполняется в Юникоде. Интересная вещь о юникоде состоит в том, что каждый символ ASCII представлен как сам, за которым следует нулевой байт (0x00). Когда это передается через MORE, он преобразует nul байты в символы новой строки !. Затем FOR/F используется для итерации каждого из символов и построения нужной строки. Последняя операция подстроки используется для удаления дополнительных + спереди.

Я немного изменил свою память о коде, играя в игры с escape-последовательностями, чтобы получить замедленное расширение в правильное время и защитить персонажа при его добавлении - все, чтобы получить технику для сохранения ^ и ! символов. Это может быть новым поводом для существующих размещенных кодов с использованием этой общей техники.

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

--output ---

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

Удивительная благодарность! – user754730

3

Этот пакетный файл должен это сделать:

@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 

Вызов с Test.bat Server отпечатков S+e+r+v+e+r на консоль.

+0

Спасибо так много! Прекрасно работает! – user754730

Смежные вопросы