我一直在寻找很多关于如何将一个string转换为一个整数在Windows批处理,但我不知道该怎么做。
我写了一个batch file,从一个目录复制到另一个文件并在当前date之后命名。 我的代码是这样的:
set FILE=log %date:~6,4%-%date:~3,2%-%date:~0,2% copy C:\log.txt C:\"%FILE%".txt
我需要做的转换,使之前的一天FILE。 例如,如果我现在运行脚本,我会得到一个名为“log 2014-07-09”的文件,但我希望它是“log 2014-07-08”。
我已经尝试了这几句话,但我得到一个关于数值的错误是无效的:
set DAY=%date:~0,2% :: this assignation give me no problems set /A DAY = %DAY%-1 :: this is the one that makes my head breaks
我不知道错误在哪里,因为我几乎不知道windows的批处理语句。 我已经阅读了关于在命令和其他网站(如这个 )的SET命令语法,但我不能得到我失败的地方。 我知道这可能是非常简单的(在某些编程语言中,一个分析语句就足够了),但是我对这个批处理脚本是一个总的新手,所以任何帮助都将不胜感激。 🙂
一种解决方法:
@echo off set "$DateNew=%date:~0,2%" set /a "$DateNew=%$DateNew:0=%-1" if %$DateNew%==0 set "$DateNew=10" set "$DateNew=0%$DateNew%" set "FILE=log %date:~6,4%-%date:~3,2%-%$dateNew:~-2%" copy C:\log.txt C:\"%FILE%.txt"
减去一个并保持前导零:
set a=08 set /aa=11%a%-1001 set a=%a:~1% echo %a%
当然, 01
– 1
= 00
…
在PowerShell中可以避免所有的cmd shell脚本(批处理)字符串解析痛苦:
copy-item C:\log.txt ("C:\{0:yyyy-MM-dd}.txt" -f (get-date).AddDays(-1))
这也避免了“月末最后一天”的问题。 例如,代码
"{0:yyyy-MM-dd}" -f (get-date "8/1/2014").AddDays(-1)
输出2014-07-31
。
这是一个强大的方式来获取批处理文件的昨天的日期:
:: get yesterdays date @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 "data=%yyyy%-%mm%-%dd%" echo Yesterday was "%data%" pause