Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 在批处理脚本中将零添加到我的文件名_Batch File_Cmd - Fatal编程技术网

Batch file 在批处理脚本中将零添加到我的文件名

Batch file 在批处理脚本中将零添加到我的文件名,batch-file,cmd,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 我尝试使用两个不同的变量,但效果相同,将此变量中的数字day=+1更改

我想在当天加上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
我尝试使用两个不同的变量,但效果相同,将此变量中的数字
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%

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

作为旁注:

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
ing到外部文件,后面的字符串。

正如@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)

我想我已经在StackOverFlow上发布了十几次日期数学批处理文件解决方案。你找过了吗?另一个选择是使用Powershell,它可以用更少的代码轻松地计算日期。这是我为这个问题找到的最简单的解决方案。我搜索了如何用变量造句来添加零,代码似乎应该可以工作,但不知道在2月28日添加一行时会发生什么情况?@MarianDiam顺便说一下:三行的错误结果是因为将它们嵌入到以
开头的命令块中(
并以匹配
结尾)
在命令块内定义/修改了
日期
且不使用。由于不知道Windows command processor在执行命令行或整个命令块之前如何预处理环境变量引用以及如何使用延迟的环境变量扩展而导致的问题,每天都会在堆栈溢出时提出。运行
set/?
并阅读所有帮助页。命令行
set/A day=%date:~1,2%
将删除前导空格,对吗?为什么不使用
set/A day=%date:=%
,这样两位数字也能正确处理?顺便说一句,我打赌你的代码片段被放在一个括号内的代码块中,因此
day
会扩展到解析整个代码块时得到的值,因为你没有使用…我对cmd不太好,对powetshell更差,但你的代码解决方案确实有效!“循环”在命令的每个输出行上运行。此命令仅输出一(1)行。行中的第一个字段,
%%a
,被放入NEWDATE变量中。这是由微软设计的。