批处理脚本中的日期输出错误仅在8日

时间:2018-09-07 13:54:26

标签: batch-file batch-processing

我当前运行以下脚本来获取当前日期减去1和当前月份。除每个月的8号和每年的8月外,它适用于所有日期和月份。我必须将脚本更改为手动设置为8月。有谁知道为什么,并且有修复程序。

SET m=%date:~4,2%
SET /A m -= 1

SET m=0%m%

REM ****** SET m=08 this was used because the date was not right ******

REM SET m=08

SET currMon=%date:~4,2%/%date:~10,4%

REM ****** SET PriorMon=12/2017 this was used for Year End because the date was not right ******

REM SET PriorMon=08/2018

SET PriorMon=%m:~-2%/%date:~10,4%

2 个答案:

答案 0 :(得分:1)

这是混合的 vb / batch 脚本。这是获取日期 Workbook w = new XSSFWorkbook(); CreationHelper createHelper = w.getCreationHelper(); CellStyle cs = w.createCellStyle(); cs.setDataFormat(createHelper.createDataFormat().getFormat("HH:mm")); Sheet sheet = w.createSheet(String.valueOf("Format Test")); Row row = sheet.createRow(0); Cell cell = row.createCell(0); cell.setCellStyle(cs); cell.setCellValue(new Date()); File outFile = new File("Test.xlsx"); try { FileOutputStream fileOut = new FileOutputStream(outFile); w.write(fileOut); } catch (IOException ex) { // do something with exception data } 或所需的任意天数的正确方法:

-1

我只是在这里回显最终结果,就今天的日期而言(对我来说,这是7日)应该回显@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 "final=%dd%-%mm%-%yyyy%" echo %final%

您可以根据自己的日期更改06-09-2018的格式。

答案 1 :(得分:0)

在纯批次are possible中进行正确的日期计算,但很麻烦。 您的方法依赖于可能未知的区域设置/用户设置相关的日期格式。

从Powershell的Win7中可以使用以下工具:

在cmd行上:

For /f "usebackq" %A in (`powershell -Nop -C "(Get-Date).AddDays(-1).ToString('MM\/yyyy')"`) Do Set Yesterday=%A

在批处理文件中:

For /f "usebackq" %%A in (`
    powershell -Nop -C "(Get-Date).AddDays(-1).ToString('MM\/yyyy')"
`) Do Set Yesterday=%%A
Echo Yesterday=%Yesterday%

根据自己的喜好修改格式字符串:

dd   = day   2 places
MM   = month 2 places
yyyy = year  4 places

其他字符必须以反斜杠转义。