我有一個字串
<?define customGUID= "DA7C36F0-A749-4CC5-9575-398C06039325"?>
我正在嘗試從這條線上洗掉 DA7C36F0-A749-4CC5-9575-398C06039325。
首先我試圖在一個變數中設定這個字串,但我不能這樣做可能是因為 < 和 ? 在字串中,我嘗試了:
set "var=<?define customGUID= "DA7C36F0-A749-4CC5-9575-398C06039325"?>"
但后來我能夠在運行時以某種方式獲取字串,現在我有了變數
line=<?define customGUID= "DA7C36F0-A749-4CC5-9575-398C06039325"?>
我無法弄清楚如何使用批處理腳本從該變數中僅修剪值,即 DA7C36F0-A749-4CC5-9575-398C06039325。
我嘗試使用以下方式修剪后綴:
set "line=%line:"?>%"
但是遇到錯誤,任何人都可以提供更好的方法嗎?注意:空格包含在字串中
uj5u.com熱心網友回復:
您可以使用"分隔符來拆分字串,但由于引號用于指定for回圈選項,因此語法看起來與平時略有不同:
@echo off
setlocal enabledelayedexpansion
set "line=<?define customGUID= "DA7C36F0-A749-4CC5-9575-398C06039325"?>"
echo !line!
for /f tokens^=2^ delims^=^" %%A in ("!line!") do set "line=%%A"
echo !line!
uj5u.com熱心網友回復:
你可以使用這個非常簡單的技巧:
@echo off
setlocal EnableDelayedExpansion
set "var=<?define customGUID= "DA7C36F0-A749-4CC5-9575-398C06039325"?>"
set "i=0" & set "v0=%var:"=" & set /A i =1 & set "v!i!=%"
echo Desired string: [%v1%]
如果您想知道這是如何作業的,請洗掉該@echo off行并仔細查看螢屏上顯示的內容...
uj5u.com熱心網友回復:
你的命令列:
set "line=%line:"?>%"
沒有意義,因為=缺少-符號(請參閱子字串替換):
set "line=%line:"?>=%"
要洗掉不需要的前綴,您可以洗掉第一個引號之前的所有內容:
set "line=%line:*"=%"
但是,這僅在洗掉后綴后才有效,因為您正在處理不平衡的引號,這與立即變數擴展一起存在問題。如果要更改順序,則必須實作轉義以不顯示未參考的重定向運算子>:
set ^"line=%line:*"=%"
set "line=%line:"?>=%"
為了避免根據輸入字串進行轉義,請使用延遲變數擴展,如下所示:
set "line=<?define customGUID= "DA7C36F0-A749-4CC5-9575-398C06039325"?>"
set line
rem // First enable delayed expansion:
setlocal EnableDelayedExpansion
rem // Then apply it by replacing `%` with `!`:
set "line=!line:*"=!"
set "line=!line:"?>=!"
set line
rem // This restores the previous state:
endlocal
rem // At this point changes in the variable are no longer available due to localisation:
set line
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/408203.html
標籤:
