如果我得到我的参数与%1,它是“服务器”我怎么能在每个字母后加一个+号? 所以我的结果是“S + E + R + V + E + R”?批量每x个字符添加一个字符
我认为Batch file to add characters to beginning and end of each line in txt file这是一个类似的问题,但我不知道如何改变代码为此目的。
任何帮助将是伟大的!
如果我得到我的参数与%1,它是“服务器”我怎么能在每个字母后加一个+号? 所以我的结果是“S + E + R + V + E + R”?批量每x个字符添加一个字符
我认为Batch file to add characters to beginning and end of each line in txt file这是一个类似的问题,但我不知道如何改变代码为此目的。
任何帮助将是伟大的!
我很确定这个问题之前已经被问及过,但是我找不到它。
有一个非常酷(和快速)的解决方案,我看到贴在某处。它使用带有/ U选项的新cmd.exe进程,以便输出为unicode。关于unicode的一个有趣的事情是每个ASCII字符都被表示为它自己,后跟一个空字节(0x00)。当它被传送到MORE时,它将nul字节转换成换行符。然后使用FOR/F迭代每个字符并构建所需的字符串。最后的子字符串操作用于从正面移除额外的+
。
我调整了一下我对代码的记忆,玩转换游戏中的转义序列,以便在正确的时间发生延迟扩展,并在附加时保护角色 - 所有这些都可以保留技术^
和!
个字符。这对于使用这种通用技术的现有发布代码来说可能是一个新的转折点。
@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+^
这个批处理文件应该这样做:
@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
到控制台呼叫。
太谢谢你了!很棒! – user754730 2014-12-05 08:05:37
非常感谢很多! – user754730 2014-12-05 07:59:11