在Windows批处理上将字符串转换为整数

时间:2014-07-09 21:23:21

标签: windows string batch-file integer

我一直在搜索很多关于如何在Windows批处理中将字符串转换为整数但我无法知道如何做到这一点。

我已经编写了一个批处理文件,它将文件从目录复制到另一个目录,并在当前日期之后命名。我的代码是这样的:

set FILE=log %date:~6,4%-%date:~3,2%-%date:~0,2% copy C:\log.txt C:\"%FILE%".txt

我需要进行转换才能使FILE成为前一天。 例如,如果我现在运行脚本,我将获得一个名为" log 2014-07-09"的文件,但我希望它是"登录2014-07-08& #34;

我已尝试过这几句话,但我收到有关数值无效的错误:

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批处理句子。我已经在帮助命令和其他网站(例如this一个)上阅读了SET命令语法,但我无法到达我失败的地方。我知道这可能非常简单(在一些编程语言中,Parse句子就足够了),但我对这个批处理脚本的东西是一个新手,所以任何帮助都会非常感激。 :)

4 个答案:

答案 0 :(得分:1)

解决问题的方法:

@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"

答案 1 :(得分:0)

减1并保持前导零:

set a=08
set /a a=11%a%-1001
set a=%a:~1%
echo %a%

当然,01 - 1 = 00 ...

答案 2 :(得分:0)

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

答案 3 :(得分:0)

这是使用批处理文件获取昨天日期的有效方法:

:: 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