有没有办法在 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
使用起来更容易。
您还可以让它仅对指定日期之前(或之前)的文件起作用,这对于清理旧日志文件特别有用。