批处理脚本(cmd),格式为DD-MM-YYYY_weekday


3

我需要使用date / t命令并将日期格式转换为DD-MM-YYYY_weekday,其中列出了所有的“-”和“ _”,但我找不到问题的答案。请你帮助我好吗?


你是什么意思weekday
DavidPostill

为/ F“ tokens = 1,2,3 delims = /”(%% 1 in('date / t')do set date = %% 2 %% 3 %% 1尝试了此操作
Anastasiya

平日-例如,周一
阿纳斯塔西

@Anastasiya完成。请参阅我的答案,该答案使用本地独立(正确)的方式来检索所需的信息。
DavidPostill

Answers:


4

我想将其格式化为DD-MM-YYYY_weekday

以下是两种解决方案:

  • 批处理文件
  • PowerShell(一种简单的单行解决方案)

批处理文件解决方案

首先,不要做什么:

  • 使用%date%提供的解决方案是,在其他的答案,取决于操作系统区域设置,区域和语言设置使用,并可以提供错误或丢失信息。

  • 例如,我计算机上的短日期格式根本不输出工作日。

解决问题的正确方法:

  • wmic另一方面,使用时,与OS区域设置,语言或用户选择的日期格式(控制面板/区域)无关。

以下批处理文件用于wmic检索日期和(本地)时间,因此不会遭受使用解决方案的缺点%date%

批处理文件还调用PowerShell来检索工作日,否则将无法直接使用该工作日。

getdate.cmd:

@echo off
setlocal
rem get the date
rem use findstr to strip blank lines from wmic output
for /f "usebackq skip=1 tokens=1-3" %%g in (`wmic Path Win32_LocalTime Get Day^,Month^,Year ^| findstr /r /v "^$"`) do (
  set _day=00%%g
  set _month=00%%h
  set _year=%%i
  )
rem pad day and month with leading zeros
set _month=%_month:~-2%
set _day=%_day:~-2%
rem get day of the week
for /f %%k in ('powershell ^(get-date^).DayOfWeek') do (
  set _dow=%%k
  )
rem output format required is DD-MM-YYYY_weekday
echo %_day%-%_month%-%_year%_%_dow%
endlocal

输出示例:

F:\test>getdate
06-06-2016_Monday

积分:


替代的Powershell解决方案。

一个简单的单行PowerShell解决方案是:

Get-Date -format "yyyy-MM-dd_dddd"

输出示例:

PS F:\test> Get-Date -format "yyyy-MM-dd_dddd"
2016-06-06_Monday

进一步阅读

  • Windows CMD命令行的AZ索引 -Windows cmd行相关的所有内容的出色参考。
  • / f-针对另一个命令的结果循环命令。
  • getdate-显示日期和时间,与操作系统区域设置,语言或用户选择的日期格式(控制面板/区域)无关。
  • 变量 -提取变量的一部分(子字符串)。
  • wmic -Windows管理规范命令。

现在我只需要了解它:)
Anastasiya

@Anastasiya不客气。我已经有了大部分代码,但是花了一些时间才弄清楚如何获得工作日。
DavidPostill

这将花费太长时间来解释;)
DavidPostill

这具有更改控制台窗口字体的副作用。看来,这特别是调用电源外壳的副作用。
维克多·斯塔夫萨

@VictorStafusa不会改变我的字体...
DavidPostill

1

尝试:

echo %date:~7,2%-%date:~4,2%-%date:~10,4%_%date:~0,3%

操纵提示的来源


输出为01-6/-_06/
DavidPostill

@DavidPostill如果您有其他解决方案,请随时发布。重复评论并没有增加太多价值。
uSlackr

@uSlackr我会的。
DavidPostill

1

这应该做。它使用for命令分解date /t结果并用于echo构造输出。详细信息可以在命令行中解决。

for /f "tokens=1,2,3,4 delims=/ " %a in ('date /t') do echo %b-%c-%d_%a

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.