【问题标题】:Replace sub-string in a FOR loop替换 FOR 循环中的子字符串
【发布时间】:2017-04-07 01:43:12
【问题描述】:

我想要特定的字符串后面的路径,

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\=

请帮帮我

【问题讨论】:

  • 您可以查看this post here 并使用this one 的信息并将它们组合起来以获得我认为您需要的结果。另外我建议您阅读the tour page 以了解该网站的工作原理。
  • test.c 是文件夹吗?它应该在PROJECT_FOLDER_PATH 中吗? = 的目的是什么?一种方法是在FOR /f 之前获取父文件夹的名称,如下所示:FOR %%a in (%PROJECT_FOLDER_PATH%) do SET parent=%%~na。然后可以使用parent等类似的方法从下一个FOR中获取文件名,并放在一起。

标签: batch-file for-loop cmd substring


【解决方案1】:

您不能对像%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 命令中的变量会在进入循环之前被展开。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-05
    • 1970-01-01
    • 2015-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多