批处理文件 - 将计算的日期添加到文件末尾

时间:2016-08-15 14:47:44

标签: batch-file

您好,感谢您提前帮助!我需要一些与我用于在.xlsx文件末尾添加日期的批处理脚本相关的专家帮助。我当前的脚本工作正常并将当前日期添加到文件的末尾,但我需要的是将当前日期减去12天以及当前日期减去6天添加到文件末尾,格式如下:测试20160807-20160813.xlsx。所以它的文件名是Test然后YYYYMMDD(减去12) - YYYYMMDD(减去6).xlsx

以下是我目前使用的脚本获取当前日期:

setlocal enabledelayedexpansion

for %%F in ("C:\test\*.xlsx") do ( 
    set "MDate=%%~tF"
    set "ParsedDate=!MDate:~6,4!!MDate:~0,2!!MDate:~3,2!"
    copy %%F %%~dpnF!ParsedDate!%%~xF.new )

for %%F in ("C:\test\*.xlsx") do ( 
    del %%F )

ren "C:\test\*.new" *.

exit

输出为Test20160815.xlsx,我需要测试20160807-20160813.xlsx

2 个答案:

答案 0 :(得分:1)

批处理脚本 - 从当天简化

减去(或添加)天数

您可以使用批处理脚本来设置日期变量,并从执行批处理脚本的当前日期减去1天(或任何天数)。

我在脚本中添加了更多注释来解释每个变量的作用等等,但基本上你像往常一样在批处理脚本中设置变量,并且它会使用它们在每个日期构建三个动态VB脚本需要进行计算(负6和3减去12)进行日期减法计算,在需要的地方添加前导零,依此类推YYYY,MM和DD变量。

添加:您还可以使用此脚本通过删除减号-向当前日期添加天数   :DynamicVBSScriptBuild 例程中的以下批处理脚本中的符号,因此您可以在此处{@ 1}}简单地删除减号以在每条线上获取,-%MinusDay%,现在,%MinusDay%,变量值将等于您要添加的天数。

重要提示:使用MinusDay=值减去时,似乎有五个9(99999)是批处理脚本的限制。当添加MinusDays=值时,似乎有6个9(999999)是批处理脚本的限制。

(我插入了你的批处理逻辑,它需要减去一些调整来处理带空格的文件,依此类推,但这些设置为MinusDays= 和S SET MinusDay12=12表示计算的-12和-6天值。)

批处理脚本

ET MinusDay6=6

更多资源

答案 1 :(得分:0)

我很想知道PJI将如何在9月1日运作。我似乎无法在上面的代码中找到支票的位置,以便当月的日期实际上小于13日。如果没有创建日期索引,然后从索引号中减去12,我就无法通过此操作。我昨天做了这个工作,实际上减少了16天的减法,以便我能够确认16天前,昨天,7月30日的结果。

我创建了一个,但在之前的响应者之前没有及时解决它,但我试图最小化复杂性。但是,我依赖于外部信息源...一个带有日期的索引文件(CSV格式)。我从今年的第一天开始就做了1000天。

您必须将CSV文件放在批处理文件正在运行的位置。"我把它放在引号中,因为你可以在任务调度程序中更改运行位置。但大多数情况下,您只需将CSV文件放在与批处理文件相同的文件夹中:dateidx.csv

扩展的代码视图

 @ECHO ON

::// Minus days is the number of days to subtract from the CURRENT DAY i.e. 2 for minus 2 days or 99999 for minus 99999 days from when it's run
SET MinusDay12=12
SET MinusDay6=6

:: This calls the temp vbs script routine that will be used to set YYYY-MM-DD values for the subtracted days date you specify
CALL :DynamicVBSScriptBuild

FOR /F "TOKENS=*" %%A IN ('cscript//nologo "%YYYYTmpVBS12%"') DO SET YYYY12=%%A
FOR /F "TOKENS=*" %%A IN ('cscript//nologo "%MMTmpVBS12%"') DO SET MM12=%%A
FOR /F "TOKENS=*" %%A IN ('cscript//nologo "%DDTmpVBS12%"') DO SET DD12=%%A

FOR /F "TOKENS=*" %%A IN ('cscript//nologo "%YYYYTmpVBS6%"') DO SET YYYY6=%%A
FOR /F "TOKENS=*" %%A IN ('cscript//nologo "%MMTmpVBS6%"') DO SET MM6=%%A
FOR /F "TOKENS=*" %%A IN ('cscript//nologo "%DDTmpVBS6%"') DO SET DD6=%%A

::// Set variables for YYYY MM DD values accordingly
SET DateValue12=%YYYY12%%MM12%%DD12%
SET DateValue6=%YYYY6%%MM6%%DD6%

SET SourceDir=C:\Test
FOR %%F in ("%SourceDir%\*.xlsx") DO ( 
    COPY /Y "%%~F" "%%~DPNF%DateValue12%-%DateValue6%%%~xF.new" )

FOR %%F IN ("%SourceDir%\*.xlsx") DO ( 
    DEL /Q /F "%%~F" )

REN "%SourceDir%\*.new" *.

EXIT /B

GOTO EOF

:DynamicVBSScriptBuild
SET YYYYTmpVBS12=%temp%\~tmp_yyyy12.vbs
SET MMTmpVBS12=%temp%\~tmp_mm12.vbs
SET DDTmpVBS12=%temp%\~tmp_dd12.vbs
SET YYYYTmpVBS6=%temp%\~tmp_yyyy6.vbs
SET MMTmpVBS6=%temp%\~tmp_mm6.vbs
SET DDTmpVBS6=%temp%\~tmp_dd6.vbs
IF EXIST "%YYYYTmpVBS12%" DEL /Q /F "%YYYYTmpVBS12%"
IF EXIST "%MMTmpVBS12%" DEL /Q /F "%MMTmpVBS12%"
IF EXIST "%DDTmpVBS12%" DEL /Q /F "%DDTmpVBS12%"
IF EXIST "%YYYYTmpVBS6%" DEL /Q /F "%YYYYTmpVBS6%"
IF EXIST "%MMTmpVBS6%" DEL /Q /F "%MMTmpVBS6%"
IF EXIST "%DDTmpVBS6%" DEL /Q /F "%DDTmpVBS6%"
ECHO dt = DateAdd("d",-%MinusDay12%,date) >> "%YYYYTmpVBS12%"
ECHO yyyy = Year(dt)                    >> "%YYYYTmpVBS12%"
ECHO WScript.Echo yyyy                  >> "%YYYYTmpVBS12%"
ECHO dt = DateAdd("d",-%MinusDay12%,date) >> "%MMTmpVBS12%"
ECHO mm = Right("0" ^& Month(dt),2)     >> "%MMTmpVBS12%"
ECHO WScript.Echo mm                    >> "%MMTmpVBS12%"
ECHO dt = DateAdd("d",-%MinusDay12%,date) >> "%DDTmpVBS12%"
ECHO dd = Right("0" ^& Day(dt),2)       >> "%DDTmpVBS12%"
ECHO WScript.Echo dd                    >> "%DDTmpVBS12%"
ECHO dt = DateAdd("d",-%MinusDay6%,date) >> "%YYYYTmpVBS6%"
ECHO yyyy = Year(dt)                    >> "%YYYYTmpVBS6%"
ECHO WScript.Echo yyyy                  >> "%YYYYTmpVBS6%"
ECHO dt = DateAdd("d",-%MinusDay6%,date) >> "%MMTmpVBS6%"
ECHO mm = Right("0" ^& Month(dt),2)     >> "%MMTmpVBS6%"
ECHO WScript.Echo mm                    >> "%MMTmpVBS6%"
ECHO dt = DateAdd("d",-%MinusDay6%,date) >> "%DDTmpVBS6%"
ECHO dd = Right("0" ^& Day(dt),2)       >> "%DDTmpVBS6%"
ECHO WScript.Echo dd                    >> "%DDTmpVBS6%"
GOTO EOF

可以更改上面的回显线,重命名文件的方式。您将使用以下内容:

for /f "tokens=1-3 delims=,D" %i in ('type dateidx.csv ^| find /i "%date:~10,4%%date:~4,2%%date:~7,2%"') do (set dateidxnum=%j)
set /a days12ago=%dateidxnum%-12
set /a days6ago=%dateidxnum%-6
for /f "tokens=1 delims=," %m in ('type dateidx.csv ^| find "D%days12ago%"') DO (
    for /f "tokens=1 delims=," %q in ('type dateidx.csv ^| find "D%days6ago%"') DO (
    echo %m-%q.xlsx
    )
)

我在示例中放置了回声,因此您可以看到功能工作。

折叠的代码视图,就像在批处理文件中一样

rename oldfilename.xlsx %m-%q.xlsx

4行。

这里是代码块中上面批处理代码的屏幕截图,复制并粘贴到命令提示符中。我把dateidx.csv文件放在c:\ test文件夹中: enter image description here