gpt4 book ai didi

windows - 使用for循环和变量替换批量拆分文件路径

转载 作者:可可西里 更新时间:2023-11-01 11:48:46 25 4
gpt4 key购买 nike

我已经搜索了很长时间,但没有任何运气能让我的脚本正常工作。我觉得我很接近,但需要一点帮助。我正在尝试使用 FOR 循环递归扫描“srcdir”(在我的脚本开头设置),然后一旦循环返回文件/路径(%%f),我就可以用其他东西替换部分文件路径(例如,C:\rootpath\src 对应 C:\rootpath\des)。

我可以通过使用像这样的脚本来做这样的事情:

set subdir=C:\rootpath\src
set subdir=%subdir:src=des%
echo %subdir%

但是,使这变得困难的是我的“srcdir”的根路径可能会改变(例如;C:\roothpath)并且“srcdir”之后递归的所有内容都可能会改变(例如,C 中文件夹“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!

关于windows - 使用for循环和变量替换批量拆分文件路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36309916/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com