【发布时间】:2016-03-30 13:12:11
【问题描述】:
我已经搜索了很长一段时间,但没有让我的脚本正常工作。我觉得我很接近,但需要一点帮助。我正在尝试使用 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”之后的任何内容:\rootpath\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%
)
任何帮助将不胜感激!谢谢!
【问题讨论】:
-
在
for循环之类的代码块中设置和读取变量后,您将需要delayed expansion... -
所以我应该在 for 循环开始之前使用“Setlocal EnableDelayedExpansion”?
-
是的,这会启用它;要实际使用它,您需要扩展像
!variable!这样的变量而不是%variable%;这也适用于子字符串替换语法... -
感谢您迄今为止的帮助。我以前也见过这个,但不知道我是否理解如何在上下文中使用它。我将如何在我的脚本上下文中使用它,以便可以在变量“a”中设置 (%%F)?
-
参见下面的my answer,它演示了在您的脚本中使用延迟扩展...您在说哪个变量
a??
标签: windows variables batch-file cmd substitution