源路径“S:\ nk \ Reporting \ 03.2013” 目标路径“S:\ nk \ final_reporting
想要从源到目标路径moov文件“Balance Sheet.xls”
注意:(日期文件夹每月更换,即2013年4月,2013年5月......等)
我可以使用批处理文件来执行此活动吗?
答案 0 :(得分: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 。它由OS提供。如果您使用
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”,则日期为1月,因此减去88,我们减去1年并添加12个月。 100-12 = 88。
然后将结果重新格式化为所需的结构,并完成所有操作!
答案 1 :(得分:-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返回没有前导零的月份,因此您必须使用简单的算法对其进行转换。