在批处理脚本中为我的文件名添加零

时间:2018-05-02 02:15:41

标签: batch-file cmd

我试图在当天添加1但是为了可能我将日期变为单位数(因为它不能添加01到1或类似的东西)。在那之后,我不能让它回到两位数(例如:01,02,09) 我的代码如下所示:

Set /a day=%date:~1,2% (this is 2)
Set /a day+=1            (this is 3 now)
Set day=0%day%       (this is zero)     

这只说前面的0 我尝试了两个不同的变量,但它的工作方式相同

2 个答案:

答案 0 :(得分:1)

通过更改此变量day=+1中的数字将为您的结果添加更多天数,或更改为day=-1将删除一天等等。

@echo off
set day=+1
echo>"%temp%\%~n0.vbs" s=DateAdd("d",%day%,now) : d=weekday(s)
echo>>"%temp%\%~n0.vbs" WScript.Echo year(s)^& right(100+month(s),2)^& right(100+day(s),2)
for /f %%a in ('cscript /nologo "%temp%\%~n0.vbs"') do set "result=%%a"
del "%temp%\%~n0.vbs"
set "YYYY=%result:~0,4%"
set "MM=%result:~4,2%"
set "DD=%result:~6,2%"
set "result=%yyyy%-%mm%-%dd%"
echo %DD%
pause

这只会回复+1天。但是,如果您想要回显完整的日期结果,只需执行echo %result%

即可 无论如何,

YYYYMMDD已被拆分为单个变量,因此您可以根据需要使用它。

正如旁注:

echo>"%temp%\%~n0.vbs" s=DateAdd("d",%day%,now) : d=weekday(s)
echo>>"%temp%\%~n0.vbs" WScript.Echo year(s)^& right(100+month(s),2)^& right

几乎与:

相同
echo s=DateAdd("d",%day%,now) : d=weekday(s) >"%temp%\%~n0.vbs" 
echo WScript.Echo year(s)^& right(100+month(s),2)^& right >>"%temp%\%~n0.vbs"

CMD对两者都会做同样的事情,那就是将输出传递给文件。我只是这样做,所以通过读取该行,您可以立即看到该行的作用,echo到外部文件,后面的字符串。

答案 1 :(得分:1)

正如@Squashman建议的那样,PowerShell使这很容易。

FOR /F %a IN ('powershell -NoProfile -Command "'{0:yyyy-MM-dd}' -f (Get-Date).AddDays(1)"') DO SET "NEWDATE=%a"
ECHO %NEWDATE%

在.bat脚本中,将变量字符加倍。

FOR /F %%a IN ('powershell -NoProfile -Command "'{0:yyyy-MM-dd}' -f (Get-Date).AddDays(1)"') DO SET "NEWDATE=%%a"
ECHO %NEWDATE%

如果使用PowerShell而不是cmd,它必须包含在FOR循环中,这样更容易。

$newdate = '{0:yyyy-MM-dd}' -f (Get-Date).AddDays(1)