簡體   English   中英

批量-替換變量的第N個字符

[英]Batch - Replace Nth Character of variable

我一直試圖從變量替換第n個字符。 這是一個例子。

String: This Will Be A 230 Bytes String

Input : 1st char, change to char 5 
       (the variable and character to change is hardcoded, so you can ignore it)

Output: 5his Will Be A 230 Bytes String

我不知道該怎么做。 這是我嘗試過的。

set remaining=237-%aircraft1Loc%
set aircraft1LocB=%aircraft1Loc%-1
call set LowTrack=%OrgLowTrack:~0,%
call set LowTrack=%%OrgLowTrack:~0,%aircraft1LocB%%%5 %%OrgLowTrack,%aircraft1Loc%,%remaining%%

這是%OrgLowTrack%

                             {0C}+{#}                                                `.:////////::--.`     ``.....``````                      ``.``  ``         ````                                             ```     ``..```             
  • LowTrack現在應包含替換后的字符串。
  • Aircraft1Loc的默認值為231,並且每次運行上述腳本時都會減少1( set /a var-=1未顯示set /a var-=1set /a var-=1 -)
  • 剩余的是237-aircraft1Loc
  • aircraft1LocB是aircraft1Loc-1

結果應該是這樣的

Original: XXXXXXXX(String shortened)
Output  : XXXXXXX5
2nd out : XXXXX5XX - This occurs when the snippet is run again

但是我的代碼片段輸出:

Original: XXXXXXXX
Output  : XXXXXXXX5 OrgLowTrack,,237 -
2nd out : XXXXXXXX5 OrgLowTrack,,237 

完全重寫該批處理(strLen需要一個子項):

:: Q:\Test\2017\07\09\SO_44995458.cmd
@Echo off&SetLocal EnableExtensions EnableDelayedExpansion
Set "string=This Will Be A 230 Bytes String"

Call :strLen string len

For /L %%i in (%len%,-1,0) Do (
  Echo !string:~0,%%i!_!string:~%%i!
)

Goto :Eof
:strLen string len
:: returns the length of a string
:: string [in]  - variable name containing the string being measured for length
:: len    [out] - variable to be used to return the string length
:$source http://www.dostips.com/DtTipsStringOperations.php#Function.strLen
SETLOCAL ENABLEDELAYEDEXPANSION
set "str=A!%~1!"
set "len=0"
for /L %%A in (12,-1,0) do (set /a "len|=1<<%%A"
  for %%B in (!len!) do if "!str:~%%B,1!"=="" set /a "len&=~1<<%%A"
)
ENDLOCAL & IF "%~2" NEQ "" SET /a %~2=%len%
EXIT /b

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM