您好,感谢您提前帮助!我需要一些与我用于在.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
答案 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文件夹中: