Batch file 批处理文件-将计算日期添加到文件末尾
您好,谢谢您的帮助!我需要一些与批处理脚本相关的专家帮助,我正在使用批处理脚本将日期添加到.xlsx文件的末尾。我的当前脚本工作正常,并将当前日期添加到文件末尾,但我需要的是以以下格式将当前日期减去12天以及当前日期减去6天添加到文件末尾:Test 20160807-20160813.xlsx。所以它是文件名测试,然后是YYYYMMDD(负12)-YYYYMMDD(负6).xlsx 以下是我当前使用的获取当前日期的脚本:Batch file 批处理文件-将计算日期添加到文件末尾,batch-file,Batch File,您好,谢谢您的帮助!我需要一些与批处理脚本相关的专家帮助,我正在使用批处理脚本将日期添加到.xlsx文件的末尾。我的当前脚本工作正常,并将当前日期添加到文件末尾,但我需要的是以以下格式将当前日期减去12天以及当前日期减去6天添加到文件末尾:Test 20160807-20160813.xlsx。所以它是文件名测试,然后是YYYYMMDD(负12)-YYYYMMDD(负6).xlsx 以下是我当前使用的获取当前日期的脚本: setlocal enabledelayedexpansion for
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
批脚本-从当前日期减去(或添加)天
您可以使用批处理脚本来执行此操作,该脚本设置日期变量,并从执行批处理脚本的当前日期中减去1天(或任何天数)
我在脚本中添加了更多的注释来解释每个变量的作用等等,但基本上你可以像往常一样在批处理脚本中设置变量,它将使用这些变量为每个需要的日期计算构建三个动态VB脚本(for-6和three-12)来进行日期减法计算,在需要的地方添加前导零,YYYY、MM和DD变量也是如此
要添加:您还可以使用此脚本通过删除减号(-
)将天数添加到当前日期
例程中下面批处理脚本中的符号:dynamicvbscriptbuild
因此,在看到此的地方,-%MinusDay%,
只需删除减号即可在这些行中的每一行上获得,%MinusDay%,
,现在MinusDay=
变量值将等于您要添加的天数
重要注意事项:使用MinusDays=
值进行减法时,五个9(99999
)似乎是批处理脚本的限制。当使用MinusDays=
值进行添加时,似乎六个9(999999
)是批处理脚本的限制
(我插入了批处理逻辑,其中需要减去一些调整以处理带有空格的文件,等等,但这些设置为set MinusDay12=12
SET MinusDay6=6
用于计算-12天和-6天的值。)
批处理脚本
@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
进一步资源
rename oldfilename.xlsx %m-%q.xlsx
我把回声放在例子中,这样你就可以看到函数的工作
折叠的代码视图,就像在批处理文件中一样
4行
下面是上面复制并粘贴到命令提示符中的代码块中的批处理代码的屏幕截图。我将dateidx.csv文件放在c:\test文件夹中:
这项工作完美无瑕!我非常感谢您的帮助,感谢您花时间彻底解释代码并将我的原始逻辑合并到解决方案中。如果有什么办法可以给你加分的话,我会帮你买几杯饮料!PowerShell的可能复制将使您的生活更加轻松(就像我在您的复制问题中提到的)。
rename oldfilename.xlsx %m-%q.xlsx
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))