在 Windows 命令提示符中迭代目录列表?

在 Windows 命令提示符中迭代目录列表?

有没有办法在 Windows 命令提示符中迭代目录列表?

我有一堆文件夹,每个文件夹都包含 SQL 转储文件。随着数据更新的到来,文件夹的数量也会增加,因此每隔一段时间我都需要处理最新的 X 个文件夹,其中 X 是变量,并不包括根文件夹中的每个子文件夹。例如,目录结构如下所示:

root/
+--folder1/
|  +--<bunch of files>
+--folder2/
|  +--<bunch of files>
+--folder3/
   +--<bunch of files>

在这种情况下,我想处理文件夹 2 和 3 中的所有文件,但不处理文件夹 1 中的所有文件。我目前使用如下代码执行此操作:

# starting in root/
cd folder2
for /f %f in ('dir /b *.sql') do mysql < %f
cd ..

cd folder3
for /f %f in ('dir /b *.sql') do mysql < %f
cd ..

我怎样才能做这样的事情?:

for x in ('folder1', 'folder2') do (
  cd %x
  for /f %f in ('dir /b *.sql') do mysql < %f
  cd ..
)

我看到还有一些其他稍微相关的问题,但为了清楚起见,我想要循环遍历文件夹中的所有子目录。我只想手动指定要循环遍历的文件夹列表。

答案1

Windows 有一个鲜为人知的标准命令:forfiles

请参阅输出forfiles /?以了解更多信息和一些使用示例。
您可以使用构造执行相同的操作for,但对于类似的东西,forfiles使用起来更容易。
您还可以让它仅对指定日期之前(或之前)的文件起作用,这对于清理旧日志文件特别有用。

相关内容