2016-11-23 140 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命令中的变量将在进入循环之前展开。