【发布时间】:2016-10-12 03:42:26
【问题描述】:
我需要在 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 是前一天。
但是,如果我需要获得前一个“工作日”,我该怎么办?
工作日,最好的解决方案可能是Excel WorkDay function、WORKDAY(start_date, days, [holidays]),但现在,为了简单起见,我们只将星期一到星期五作为工作日。所以如果今天是星期二,那么上一个工作日就是星期一,而如果今天是星期一,那么上一个工作日就是上一个星期五。
Powershell Golf: Next business day 有一个关于如何获取“下一个工作日”的示例,但是,它似乎在 powershell 界面下运行。我试过但没有成功把它变成一个dos批处理文件。
【问题讨论】:
-
“工作日”在您的问题中没有精确定义,可能取决于特定于您客户需求的许多因素。
-
我会尝试运行另一个 powershell 命令来使用this anwers 获取工作日的编号,如果结果证明“昨天”是星期天,则运行用于获取的命令昨天的日期不是
addDays(-1),而是addDays(-3),以获得星期五的日期。如果您只想拥有工作日,如果昨天是周六或周日,您可以返回Friday。 -
@geisterfurz007 如何将powershell和dos命令结合在一起?
-
在上面的代码中你是如何做到的。您应该像以前一样将 powershell 命令的结果放入一个变量中,然后使用该变量生成下一个命令,您应该从中获得所需的输出。
标签: powershell batch-file