使用for循环和变量替换批量拆分文件路径
Splitting file path in batch using for loop and variable substitution
我已经搜索了很长时间,但没有任何运气能让我的脚本正常工作。我觉得我很接近,但需要一点帮助。我正在尝试使用 FOR 循环递归扫描 "srcdir"(在我的脚本开头设置),然后一旦循环 returns files/paths (%%f),然后我可以替换文件路径的一部分与其他内容(例如,C:\rootpath\src 对应 C:\rootpath\des)。
我可以通过使用像这样的脚本来做这样的事情:
set subdir=C:\rootpath\src
set subdir=%subdir:src=des%
echo %subdir%
然而,让这变得困难的是我的 "srcdir" 的根路径可能会改变(例如;C:\roothpath)并且 "srcdir" 之后递归的所有内容都可能改变(例如之后的任何内容) C:\rootpath\src 中的文件夹 "src")。唯一不变的路径是文件夹 src 和文件夹 des(位于我 运行 我的批处理文件所在的同一目录)。
所以,通过在前面的例子中使用相同的技术,我想使用 FOR 循环递归地找到文件的完整路径 "srcdir" (%%f) 并替换文件夹 "src" 与路径字符串中的文件夹 "des"。因此,我尝试将“%%f”设置为变量(子目录)并使用变量替换替换文件夹。
这是我当前的非工作脚本:
set srcdir=C:\rootpath\src
for /r "%srcdir%" %%f in (*.txt) do (
set subdir=%%f
set subdir=%subdir:src=des%
echo %subdir%
)
如有任何帮助,我们将不胜感激!谢谢!
您需要启用 delayed expansion,因为您正在代码块内分配和读取变量,例如 for
循环:
setlocal EnableDelayedExpansion
set "srcdir=C:\rootpath\src"
for /R "%srcdir%" %%F in ("*.txt") do (
set "subdir=%%~fF"
set "subdir=!subdir:\src\=\des\!"
echo(!subdir!
)
endlocal
setlocal EnableDelayedExpansion
命令启用延时扩容;它还本地化环境,这意味着对环境变量的更改仅在执行 endlocal
或批处理文件终止之前可用。
要真正使用延迟展开,需要用感叹号代替百分号,所以%subdir%
变成了!subdir!
。
我已经搜索了很长时间,但没有任何运气能让我的脚本正常工作。我觉得我很接近,但需要一点帮助。我正在尝试使用 FOR 循环递归扫描 "srcdir"(在我的脚本开头设置),然后一旦循环 returns files/paths (%%f),然后我可以替换文件路径的一部分与其他内容(例如,C:\rootpath\src 对应 C:\rootpath\des)。
我可以通过使用像这样的脚本来做这样的事情:
set subdir=C:\rootpath\src
set subdir=%subdir:src=des%
echo %subdir%
然而,让这变得困难的是我的 "srcdir" 的根路径可能会改变(例如;C:\roothpath)并且 "srcdir" 之后递归的所有内容都可能改变(例如之后的任何内容) C:\rootpath\src 中的文件夹 "src")。唯一不变的路径是文件夹 src 和文件夹 des(位于我 运行 我的批处理文件所在的同一目录)。
所以,通过在前面的例子中使用相同的技术,我想使用 FOR 循环递归地找到文件的完整路径 "srcdir" (%%f) 并替换文件夹 "src" 与路径字符串中的文件夹 "des"。因此,我尝试将“%%f”设置为变量(子目录)并使用变量替换替换文件夹。
这是我当前的非工作脚本:
set srcdir=C:\rootpath\src
for /r "%srcdir%" %%f in (*.txt) do (
set subdir=%%f
set subdir=%subdir:src=des%
echo %subdir%
)
如有任何帮助,我们将不胜感激!谢谢!
您需要启用 delayed expansion,因为您正在代码块内分配和读取变量,例如 for
循环:
setlocal EnableDelayedExpansion
set "srcdir=C:\rootpath\src"
for /R "%srcdir%" %%F in ("*.txt") do (
set "subdir=%%~fF"
set "subdir=!subdir:\src\=\des\!"
echo(!subdir!
)
endlocal
setlocal EnableDelayedExpansion
命令启用延时扩容;它还本地化环境,这意味着对环境变量的更改仅在执行 endlocal
或批处理文件终止之前可用。
要真正使用延迟展开,需要用感叹号代替百分号,所以%subdir%
变成了!subdir!
。