如何在Windows命令行中使用for循环?

48

我想知道这是否有可能?虽然我不熟悉使用Windows命令行,但是我必须在我正在开发的项目中使用它。我有很多文件,需要对每个文件执行一个函数。我通常使用Python,但显然这有点不同,所以我希望能得到一些帮助。

基本上,我需要用for循环遍历文件夹中的17个文件,对每个文件执行一个函数(使用此项目特定的软件),然后输出一个具有唯一名称的文件(该函数通常要求我指定输出文件名)。我可以手工为这17个文件做这个事情,但它实际上是创建一个文件的数据库,然后将其与这17个文件逐一比较。尽管需要进行几百次迭代,但使用for循环可以节省我的大量时间。

您有什么建议吗?

3个回答

63

命令行解释器确实具有FOR结构,您可以从命令提示符或批处理文件中使用它。

对于您的目的,您可能需要类似于以下内容:

FOR %i IN (*.ext) DO my-function %i

这将导致当前目录中所有扩展名为 *.ext 的文件名被传递给 my-function(例如另一个.bat文件)。

(*.ext) 部分是"文件规范(filespec)",您可以使用不同的方式指定文件集合。例如,您可以执行以下操作:

FOR %i IN (C:\Some\Other\Dir\*.ext) DO my-function %i

在不同的目录中执行操作。

针对文件规范和 FOR 循环,有很多选项可用。请参见:

HELP FOR

从命令提示符获取更多信息。


谢谢,这非常有帮助。%i 是什么意思?实际上,为了使用该函数,我需要将命令行设置为当前目录,并且那里的文件不是我需要执行该函数的文件。它们在另一个目录中。有没有方法指定要在哪个目录上执行for循环? - TheFoxx
%i只是一个保存匹配文件名的变量。您可以使用不同的修饰符以不同的格式获取它。我更新了答案,描述了filespec可以包括不同的目录,因此您可以指定要在其中执行循环的特定目录。文档还解释了/R选项,如果需要,将遍历目录。 - Myk Willis
6
在批处理文件中使用 %%,对于每个 .ext 文件,执行 my-function 函数。 - Emile

8
这可能会帮助您找到所需的内容... 批处理脚本循环 我的回答如下:
@echo off
:start
set /a var+=1
if %var% EQU 100 goto end
:: Code you want to run goes here
goto start

:end
echo var has reached %var%.
pause
exit

起始标签下的第一组命令会循环执行,直到变量%var%达到100。一旦发生这种情况,它会通知您并允许您退出。通过将100更改为17并放置您的代码或使用调用命令,然后跟随批处理文件的路径(在文件上Shift+右键单击并选择“复制为路径”),此代码可以根据您的需求进行自适应。


6
你也可以考虑添加 "
例如:for %i in (*.wav) do opusenc "%~ni.wav" "%~ni.opus" 是个很好的主意。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接