2016-11-23 101 views
1

我希望特定字符串以後的道路,替換子字符串循環

set PROJECT_FOLDER_PATH=E:\aaa\bbb\cccc 
FOR /f %%i IN ('dir /b /s %PROJECT_FOLDER_PATH%\src\*.c') DO echo %%i:bbb\=% 

預期結果:cccc\src\test.c

但目前的結果:E:\aaa\bbb\cccc\src\test.c:bbb\=

請幫我

+0

你可以查看[這篇文章在這裏](http://stackoverflow.com/q/17279114/6707985)並使用[this one]的信息(http://stackoverflow.com/a/15568171/6707985)並結合他們得到我認爲你需要的結果。另外我建議你閱讀[旅遊網頁](http://stackoverflow.com/tour)來了解這個網站的工作原理。 – geisterfurz007

+0

'test.c'是一個文件夾嗎?它應該在'PROJECT_FOLDER_PATH'中嗎? '='的用途是什麼?一種方法是在'FOR/f'之前獲得父文件夾的名稱,如下所示:'FOR %% a in(%PROJECT_FOLDER_PATH%)do SET parent = %%〜na'。然後你可以使用'parent'和一個類似的方法從下一個FOR獲取文件名,並將它們放在一起。 – soja

回答

4

您不能對參數樣式變量(如%i)使用替換語法。首先使用set將該值存儲到正常變量中。

setlocal EnableDelayedExpansion 

set PROJECT_FOLDER_PATH=E:\aaa\bbb\cccc 
FOR /f %%i IN ('dir /b /s %PROJECT_FOLDER_PATH%\src\*.c') DO (
    set TMP_PATH=%%i 
    echo !TMP_PATH:bbb\=! 
) 

我們需要Delayed expansion變量來設置和讀取變量在同一個循環中。否則,echo命令中的變量將在進入循環之前展開。