作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要在 dos 批处理文件中获取前一个工作日,因为要处理的文件在文件名中具有日期,在 yyyymmdd
下和 ddmmmyy
格式。
看来,据Dos to get next day date ,这在纯 dos 命令中相当复杂。
所以我转向在 dos 中调用 powershell。到目前为止,我到这里:
FOR /f "usebackq" %%i IN (`PowerShell $date ^= Get-Date^; $date.ToString^('yyyyMMdd'^)`) DO SET yyyymmdd=%%i
FOR /f "usebackq" %%i IN (`PowerShell $date ^= Get-Date^; $date.ToString^('ddMMMyy'^)`) DO SET ddmmmyy=%%
FOR /f "usebackq" %%i IN (`PowerShell $date ^= Get-Date^; $date^=$date.AddDays^(-1^)^; $date.ToString^('yyyyMMdd'^)`) DO SET yyyymmddEOD=%%i
FOR /f "usebackq" %%i IN (`PowerShell $date ^= Get-Date^; $date^=$date.AddDays^(-1^)^; $date.ToString^('ddMMMyy'^)`) DO SET ddmmmyyEOD=%%
yyyymmdd
和
ddmmmyy
是今天的日期,而
yyyymmddEOD
和
ddmmmyyEOD
是前一天。
WORKDAY(start_date, days, [holidays])
,但现在,为了简单起见,我们只将周一至周五作为工作日。所以如果今天是星期二,那么前一个工作日就是星期一,如果今天是星期一,那么前一个工作日就是前一个星期五。
最佳答案
这可能更具可读性。您可以根据需要进行调整。不需要转义字符。
@echo off & setlocal enabledelayedexpansion
set days=-0 -1 -3
set formats=yyyyMMdd ddMMMyy
set ps=[DateTime]::Now.AddDays(%%b).ToString('%%a')
REM Get today, yesterday, and three days ago in two date formats
for %%a in (%formats%) do (
for %%b in (%days%) do (
for /f %%p in ('"powershell %ps%"') do set date-%%a%%b=%%p
)
)
REM If today is Monday, subtract 3 for EOD, else subtract 1
for /f %%a in ('"powershell [DateTime]::Now.ToString('ddd')"') do (
if "%%a"=="Mon" (set sub=3) else (set sub=1)
)
REM Change the variable names if you want
set yyyymmdd=%date-yyyymmdd-0%
set ddmmmyy=%date-ddmmmyy-0%
set yyyymmddEOD=!date-yyyymmdd-%sub%!
set ddmmmyyEOD=!date-ddmmmyy-%sub%!
REM Output your variables
set yyyymmdd
set ddmmmyy
yyyymmdd=20161012
yyyymmddEOD=20161011
ddmmmyy=12Oct16
ddmmmyyEOD=11Oct16
@echo off
REM If today is Monday, subtract 3 for EOD, else subtract 1
if %date:~0,3%==Mon (set EOD=-3) else (set EOD=-1)
REM Get today and last EOB in two date formats
for %%a in (yyyyMMdd ddMMMyy) do (
for /f %%p in ('"powershell [DateTime]::Now.ToString('%%a')"') do set %%a=%%p
for /f %%p in ('"powershell [DateTime]::Now.AddDays(%EOD%).ToString('%%a')"') do set %%aEOD=%%p
)
REM Output your variables
set yyyymmdd
set ddmmmyy
关于powershell - 如何在windows命令中获取前一个工作日(通过powershell),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39990161/
我是一名优秀的程序员,十分优秀!