Batch file 批处理文件:for循环中的变量
我是cmd脚本的新手,遇到了一个问题。 我想遍历当前文件夹中的所有文件以及存储在数组Batch file 批处理文件:for循环中的变量,batch-file,Batch File,我是cmd脚本的新手,遇到了一个问题。 我想遍历当前文件夹中的所有文件以及存储在数组%list%中具有特定结尾的所有子文件夹。所以我从以下几点开始: @for /R %%d in (.) do @( cd %%d @(for %%a in (%list%) do @( for %%f in (*.%%a) do @echo %%d/%%f )) ) 这可以工作,但是它会生成类似C:\test\。\myfile.txt的路径 所以我
%list%
中具有特定结尾的所有子文件夹。所以我从以下几点开始:
@for /R %%d in (.) do @(
cd %%d
@(for %%a in (%list%) do @(
for %%f in (*.%%a) do @echo %%d/%%f
))
)
这可以工作,但是它会生成类似C:\test\。\myfile.txt的路径
所以我想得到dir的一个子串。由于这对%%d这样的变量不起作用,我尝试将%%d存储在单独的变量中:
@for /R %%d in (.) do @(
cd %%d
set dir=%%d
@(for %%a in (%list%) do @(
for %%f in (*.%%a) do @echo %dir%/%%f
))
)
但这给了我与@echo/%f
我做错了什么?首先,我不明白你为什么坚持让每个命令都静音,而你只需通过一个
@echo off
绝对不需要在每次迭代中更改当前目录,您可以从您所在的位置执行任务
通过将~f
修饰符应用到%d
中,可以从/R变量的中删除尾随的\.
,因此使用%%~fd
路径C:\test\.
将变为C:\test
@echo off
for /R %%d in (.) do for %%e in (%list%) do (
for %%f in ("%%~fd\*.%%e") do echo %%f
)
另一个问题。你的名单有多长?如果它很短,可能会有更好的解决方案。这可能会有帮助,但它并不能真正回答问题。我如何将%%d存储在变量dir中,以便使用%dir:~3,-2%之类的内容?我没有注意到这一点,因为您询问的方式似乎只是试图解决尾部\.
的问题,甚至在您第二次尝试的代码中,你没有像在上面的评论中那样尝试从%dir%
中获取任何子字符串,也没有尝试使用变量对变量进行一些操作,这是没有意义的。因此,请更新你的问题和代码,并准确显示你想要获取的子字符串,以及你想要如何使用它。如果你最初打算使用一个变量并从中获取子字符串是为了解决\。
这是我给你的正确答案,没有必要使用变量,你的问题变成了一个已经解决的实例,但是如果你想将变量用于其他事情,或者你只是好奇如何在代码中使用变量阻止然后你的问题是重复的,这已经被标记为我写这个评论。