Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 批处理文件:for循环中的变量_Batch File - Fatal编程技术网

Batch file 批处理文件:for循环中的变量

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的路径 所以我

我是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的路径 所以我想得到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%
中获取任何子字符串,也没有尝试使用变量对变量进行一些操作,这是没有意义的。因此,请更新你的问题和代码,并准确显示你想要获取的子字符串,以及你想要如何使用它。如果你最初打算使用一个变量并从中获取子字符串是为了解决
\。
这是我给你的正确答案,没有必要使用变量,你的问题变成了一个已经解决的实例,但是如果你想将变量用于其他事情,或者你只是好奇如何在代码中使用变量阻止然后你的问题是重复的,这已经被标记为我写这个评论。