我正在尝试创建一个查看abc.txt
文件内部的脚本,该文件包含具有flow28092014
,collateral28102014
和{{1}等命名约定的文件列表}。
例如:
trade28032014
因此脚本需要检查文件名并根据其名称(因为它们的名称有给定日期),它应该将这些文件逐个复制到所需的文件夹(文件夹名称为flow28092014
collateral28102014
trade28032014
,{{ 1}},Q1-2015
和Q2-2015
)。因此,对于例如Q3-2015
来自 March 的文件,它应该将它们发送到Q4-2015
,如果abc.txt
具有来自 June 的文件名,那么它应该将它们发送到Q1-2015
文件夹。
下面我给出了我的代码,但它同时发送了所有文件:
abc.txt
答案 0 :(得分:0)
尝试以下方法:
> %ftp_file% (for %%a in ("%src%\*.*") do echo %%~na)
for /f "usebackq tokens=*" %%A in ("%ftp_file%") do (
set "filename=%%~nA"
set "mm=!filename:~-6,2!"
for /f "tokens=* delims=0" %%B in ("!mm!") do set "mm=%%B"
set "yyyy=!filename:~-4!"
if "!yyyy!"=="%year%" (
if !mm! LEQ 3 (
copy "%%~fA" "%dest%\Q1-%year%"
) else if !mm! LEQ 6 (
copy "%%~fA" "%dest%\Q2-%year%"
) else if !mm! LEQ 9 (
copy "%%~fA" "%dest%\Q3-%year%"
) else (
copy "%%~fA" "%dest%\Q4-%year%"
)
) else (
echo Year does not match.
)
)
filename
以仅获取纯名称(无扩展名); if !filename!:~-1!==l
查询,因为它在问题的代码摘录中令人困惑; (当然,它可以重新插入最终的脚本中;)mm
的提取(由于filename
的更改); copy
来源%%~fA
已经是完整路径;并将目标路径放在""
之间(假设dest
不包含任何周围的双引号); yyyy
; if
/ else
逻辑,用于正确排序文件; copy
命令中,您错过了filename
的延迟扩展(您声明为%filename%
而不是!filename!
);因为我使用%%~fA
作为复制源,所以此问题不再存在; Q2
副本行中,有一个拼写错误,目的地中的前导%
丢失了(Q2-year%
); >
移出for
主体,因此文件写入一次; (以前,这些行已被追加;)mm
从for /f
中删除了前导零,还从if
语句中的数字常量中删除了前导零;这样做是为了进行真正的数字比较;在if
语句表达式中声明前导零定义为将数字解释为八进制而不是十进制数,但08
和09
不是有效的八进制数,因此实际执行了字符串比较; < / LI>
醇>
答案 1 :(得分:0)
(for %%a in ("%src%\*.*") do echo %%~na) > %ftp_file%
for /F "tokens=*" %%A in (%ftp_file%) do (
set "filename=%%A"
set /A "quarter=(1!filename:~-6,2!-101)/3+1, year=!filename:~-4!"
copy "%src%\%%A" "%dest%\Q!quarter!-!year!"
)
set /A
命令将月份数转换为适当的年度季度。例如:
set "filename=trade28032014"
!filename:~-6,2! is month number: 03
1!filename:~-6,2!-101 is month minus one without left zeros: 103-101 = 2
(2)/3+1 is year quarter: 1