-2

源路径“S:\nk\Reporting\03.2013”​​ 目标路径“S:\nk\final_reporting

想要将文件“Balance Sheet.xls”从源路径移动到目标路径

注意:(日期文件夹每月更改 ie04.2013、05.2013.... 等)

我可以有一个批处理文件来做这个活动吗?

4

2 回答 2

0
@ECHO OFF
SETLOCAL
FOR %%i IN (20/11/2012 20/01/2012 20/01/2013 20/01/2009 20/04/2013 
            20/02/2013 20/03/2013 20/08/2012 20/09/2000 20/01/2000
       ) DO CALL :calc %%i
GOTO :eof

:calc
SET dayte=%1
SET today=%dayte:~0,2%-%dayte:~3,2%-%dayte:~-4%
SET /a lastmonth=%dayte:~-4%%dayte:~3,2%-1
IF %lastmonth:~-2%==00 SET /a lastmonth-=88
SET lastmonth=%lastmonth:~-2%.%lastmonth:~0,4%
ECHO with date=%dayte% today=%today% lastmonth=%lastmonth%

GOTO :eof

第一个小问题是%date%MAGIC VARIABLE。它由操作系统提供。HOWEVER如果您分配一个值,DATE就像您对您的

set date="%date:~7,2%-%date:~4,2%-%date:~10,4%"

然后环境变量%date%会覆盖MAGIC VARIABLE(所以不要这样做 -%RANDOM%和其他人一样......)

所以,我展示的代码使用了我的日期格式——你需要做的就是改变以适应你的。

本质上,today正在按照您的设置进行设置date

lastmonth设置为年份和月份的连接,然后减去一个,因此在 2013 年 4 月lastmonth将设置为/a表达式的算术结果 (201304 - 1) 那么,如果lastmonth现在的最后两个字符是“00”,那么日期是一月,所以减去 88,我们减去 1 年并加上 12 个月。100-12=88。

然后将结果重新格式化为所需的结构,一切就完成了!

于 2013-04-02T10:23:00.340 回答
-1

您需要从当前日期中提取月份和年份。问题%date%在于它没有可预测的格式,因为它可能会被用户更改。更可靠的方法是改用wmic

试试这个代码让你开始

@echo off
FOR /F "skip=1 tokens=1-6" %%A IN ('WMIC Path Win32_LocalTime Get Day^,Hour^,Minute^,Month^,Second^,Year /Format:table') DO (
  set /a mm=100+%%D
  set mmyyyy=%mm:~1%.%%F
)
echo move S:\nk\Reporting\%mmyyyy%\balance.xls S:\nk\final_reporting

WMIC 返回没有前导零的月份,因此您必须使用简单的算术对其进行转换。

于 2013-04-02T11:41:05.700 回答