我已经搜索了一段时间而没有任何运气让我的脚本正常工作。我觉得我非常接近,但需要一些帮助。我试图使用FOR循环递归扫描" srcdir" (在我的脚本的开头设置),然后一旦循环返回文件/路径(%% f),那么我可以用其他东西替换部分文件路径(例如; C:\ rootpath \ src用于C:\ rootpath \ DES)。
我可以通过使用像这样的脚本来做这样的事情:
VALUES(
然而,让这很困难的是我的" srcdir"的根路径。可以在" srcdir"之后递归地改变(例如; C:\ roothpath)和所有内容。可能会改变(例如,文件夹" src"在C:\ rootpath \ src中)之后的任何内容。文件夹src和文件夹des的唯一常量路径(位于我运行批处理文件的同一目录中)。
所以,通过在前面的例子中使用相同的技术,我想使用FOR循环递归地找到" srcdir"中的文件的完整路径。 (%% f)并替换文件夹" src"用文件夹" des"在路径字符串中。因此,我试图设置" %% f"作为变量(subdir)并使用变量替换替换文件夹。
这是我目前的非工作脚本:
set subdir=C:\rootpath\src
set subdir=%subdir:src=des%
echo %subdir%
任何帮助将不胜感激!谢谢!
答案 0 :(得分:2)
您需要启用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!
。