3 回答

TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超5個(gè)贊
簡(jiǎn)單的方法是使用
for %a in ("%path:;=";"%") do @echo %~a
這適用于沒(méi)有;在路徑中的所有人,沒(méi)有"圍繞單個(gè)元素
測(cè)試路徑= C:\ qt \ 4.6.3 \ bin; C:\ Program Files; C:\ documents&Settings
但是“始終”的解決方案有點(diǎn)復(fù)雜
EDIT:現(xiàn)在是一個(gè)有效的變體
@echo off
setlocal DisableDelayedExpansion
set "var=foo & bar;baz<>gak;"semi;colons;^&embedded";foo again!;throw (in) some (parentheses);"unmatched ;-)";(too"
set "var=%var:"=""%"
set "var=%var:^=^^%"
set "var=%var:&=^&%"
set "var=%var:|=^|%"
set "var=%var:<=^<%"
set "var=%var:>=^>%"
set "var=%var:;=^;^;%"
rem ** This is the key line, the missing quote is intended
set var=%var:""="%
set "var=%var:"=""%"
set "var=%var:;;="";""%"
set "var=%var:^;^;=;%"
set "var=%var:""="%"
set "var=%var:"=""%"
set "var=%var:"";""=";"%"
set "var=%var:"""="%"
setlocal EnableDelayedExpansion
for %%a in ("!var!") do (
endlocal
echo %%~a
setlocal EnableDelayedExpansion
)
那我在那做什么?
我試圖解決主要問(wèn)題:引號(hào)內(nèi)的分號(hào)應(yīng)該被忽略,只有正常的分號(hào)應(yīng)該被替換為";"
我使用批量解釋器本身來(lái)解決這個(gè)問(wèn)題。
首先,我必須使字符串安全,逃避所有特殊字符。
然后全部;被替換^;^;
然后技巧從線開(kāi)始
set var=%var:"=""%"(缺少的引用是關(guān)鍵?。?。
這擴(kuò)展的方式使得所有轉(zhuǎn)義字符都將丟失它們的轉(zhuǎn)義符號(hào):
var=foo & bar;;baz<>gak;;"semi^;^;colons^;^;^&embedded";;foo again!;;...
但僅在引號(hào)之外,所以現(xiàn)在引號(hào);;和內(nèi)部之間的分號(hào)之間存在差異^;^;。
這是關(guān)鍵。

TA貢獻(xiàn)1900條經(jīng)驗(yàn) 獲得超5個(gè)贊
一個(gè)簡(jiǎn)單的襯墊,可以打印PATH
環(huán)境變量:
ECHO.%PATH:;= & ECHO.%
如果你的PATH
等于A;B;C
上面的字符串替換將改變ECHO.A & ECHO.B & ECHO.C
它并一次性執(zhí)行它。完全停止可防止出現(xiàn)“ECHO is on”消息。
- 3 回答
- 0 關(guān)注
- 659 瀏覽
添加回答
舉報(bào)