我有两个文件说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))
答案 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!"
)
参数输入命令的命令说明;例如:/?