如何编写批处理脚本来检查文件夹内的多个文件夹和文件夹并将 csv 文件设置为变量?

Posted

技术标签:

【中文标题】如何编写批处理脚本来检查文件夹内的多个文件夹和文件夹并将 csv 文件设置为变量?【英文标题】:How to Write a batch script for checking mulitple folders and folder inside a folder and set the csv files to variables? 【发布时间】:2020-07-15 22:24:02 【问题描述】:

我必须编写一个批处理脚本以进入多个文件夹和文件夹内的文件夹,并在其中设置 CSV 文件并将其设置为变量。

我的文件夹结构是

c:\data\client1\data1.csv
c:\data\client1\data2.csv
c:\data\client1\config\env.csv

c:\data\client2\data1.csv
c:\data\client2\data2.csv
c:\data\client2\config\env.csv

所以像这些我有很多客户文件夹,里面有配置文件夹和一些数据 CSV

现在我必须使用一些循环进入“c:\data\”并检查 client1 文件夹,在里面我需要使用 for 循环设置 var = data1.csv 和 var = data2.csv 然后我需要去在config文件夹中设置envs= env.csv(即文件的文件名或路径)

我尝试了一段代码,但我没有正确登录如何在里面搜索和循环。

@ECHO OFF & setlocal EnableDelayedExpansion
CD "C:\data"
For /R %%A in (*.csv) DO (
  Set "file[!#!]=%%A"
  Set /A #+=1
  )
For /L %%B in (0,1,!#!) do Echo(!file[%%B]!

我根据解决方案修改了代码。但现在我无法在 client1 文件夹中设置 data1.csv。谁能解释这段代码? 谁能帮我解释一下编码部分的逻辑?

输出是:

c:\data\client1\data2.csv
c:\data\client1\config\env.csv
c:\data\client2\data1.csv
c:\data\client2\data2.csv
c:\data\client2\config\env.csv

【问题讨论】:

【参考方案1】:

您可以执行以下操作将它们分配给索引变量。 即使是中等大小的文件集,单个变量也会超出行容量,从而丢失分配给它的信息。

@ECHO OFF & setlocal EnableDelayedExpansion
CD "C:\data\client"
For /R %%A in (*.csv) DO (
    Set "file[!#!]=%%A"
    Set /A #+=1
)
For /L %%B in (0,1,!#!) do Echo(!file[%%B]!

【讨论】:

你能解释一下这段代码吗?这实际上有效,但我没有在输出中得到 data1.csv。我得到: C:\data\client1\data2.csv C:\data\client1\config\env.csv C:\data\client2\data1.csv C:\data\client2\data2.csv C:\数据\client2\config\env.csv /R 是使用 For 循环递归处理文件夹及其子文件夹的开关。尝试将行 CD "C:\data\Client" 调整为 CD "C:\data\"。 Setlocal EnableDelayedExpansion 允许您在代码块中分配和访问新变量,例如与 !变量的扩展。 # 计数器用作文件变量中的组合变量以创建伪数组,并提供添加到数组中的文件数的计数。 For /L 循环使用# 变量的值来遍历所有变量

以上是关于如何编写批处理脚本来检查文件夹内的多个文件夹和文件夹并将 csv 文件设置为变量?的主要内容,如果未能解决你的问题,请参考以下文章

如何编写Windows安全检查脚本

Python,在多个目录中逐个删除文件

如何在bash中使用多个ifs遍历多个目录?

如何查找多个文件、检查重复文件并用 bash、sed 脚本替换

如果我在日志文件中找到字符串“found”,如何编写批处理脚本来循环目录中的日志文件并生成“filename.found”?

如何创建一个批处理文件来检查文件夹中是不是存在四个特定的文件/文件夹?