如果我得到我的參數與%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