每x个字符批量添加一个字符

时间:2014-12-04 15:32:50

标签: windows string batch-file

如果我的参数是%1,那么" Server"如何在每个字母后添加一个+号? 所以我的结果将是" S + e + r + v + e + r"?

我认为Batch file to add characters to beginning and end of each line in txt file这是一个类似的问题,但我不知道如何为此目的更改代码。

任何帮助都会很棒!

2 个答案:

答案 0 :(得分: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打印到控制台。

答案 1 :(得分:3)

我很确定之前有人问过并回答过,但我找不到它。

我看到有一个非常酷(快速)的解决方案。它使用带有/ U选项的新cmd.exe进程,因此输出为unicode。关于unicode的有趣之处在于每个ASCII字符都表示为自身,后跟一个空字节(0x00)。当它通过管道传输到MORE时,它会将nul字节转换为换行符!然后使用FOR / F迭代每个字符并构建所需的字符串。最后一个子字符串操作用于从前面删除额外的+

我稍稍调整了对代码的记忆,使用转义序列玩游戏以便在正确的时间发生延迟扩展,并在附加后保护字符 - 所有这些都是为了保留{ {1}}和^个字符。这可能是使用这种通用技术对现有发布代码的新转折。

!

- OUTPUT ---

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