Vlookup逻辑用于创建用于移动报表的文件夹

时间:2017-11-23 01:56:18

标签: batch-file scripting command

我有两个文件说Report.csv Reference.csv

我想写一个脚本将在报告文件名中引用Report-ID并与参考文件数据交叉引用,以确定移动报告的文件夹位置。

例如:Report.csv

R-00001.csv

Reference.csv中的数据如下:

ReportID CompanyName
R-00001  BB Trust
R-00002  AA Trust
R-00003  ZZ Trust
R-00004  Canada Inc.

在上文中,我们可以看到Report.csv&的文件名。 Reference.csv中的第一个单元格值是相同的。

查找后,需要将R-00001.csv文件移动到" BB Trust"夹

同样,对于每个报告文件,都需要遵循相同的程序

请帮忙,这会简化我的工作

  echo off
  :: Gets the filenames to textfile
  dir /b "C:\Users\Reports\" > 
  reportnames.txt
  :: Compare two files to look for 
  the matching ReportID and get the 
  Companyname value from 
  Reference.csv & create a folder in 
  that name and move the report 
  files to that corresponding folder

  for /f "tokens=1" %%i in 
  (Reportnames.txt) do
  @findstr "%%i," Reference.csv >nul 
  & If errorlevel 0 if not
  errorlevel 1 (for /f "tokens=2" 
  %%m in ('findstr /i /L "%%i," 
  Reference.csv') do ( cd 
  C:\Users\Archive\ & mkdir 
  %%m))

1 个答案:

答案 0 :(得分:0)

您的描述有些令人困惑,示例代码与问题描述不符,因此我选择遵循代码。

首先创建@api.multi def _alert_product_expiry(self): for data in self: template_id = self.env.ref('module_name.email_template_exp_prod_tag_cycle_report') send = template_id.send_mail(data.id, force_send=True) 列表中的Reportnames.txt文件,然后处理此类文件...可以通过标准dir /B命令直接处理文件名列表。

查找ReportId的匹配CompanyName的“查找逻辑”的最简单和最直接的方法是通过array(尽管您可能知道它为associative array)。

最后,使用the :: trick插入注释而不是for命令并不是一个好主意(无论你用这样的技巧看到多少个例子)。

rem

如果您对命令有任何疑问,可以查看使用@echo off rem Next line is required to correctly process array elements in a FOR loop setlocal EnableDelayedExpansion rem Load the associative array from Reference.csv file for /F "skip=1 tokens=1*" %%a in (Reference.csv) do set "CompanyName[%%a]=%%b" rem Previous FOR is equivalent to these lines: rem set "CompanyName[R-00001]=BB Trust" rem set "CompanyName[R-00002]=AA Trust" etc... rem Process the filenames for %%a in (C:\Users\Reports\*.*) do ( rem Get the matching CompanyName for the ReportId set "folder=!CompanyName[%%~Na]!" if not exist "C:\Users\Archive\!folder!" md "C:\Users\Archive\!folder!" move "%%a" "C:\Users\Archive\!folder!" ) 参数输入命令的命令说明;例如:/?