在Windows 7批处理作业中格式化日期

5

我正在尝试在Windows 7批处理作业中使用当前日期。批处理作业会打开多个文件,这些文件的文件名末尾附加了今天的日期。 例如:

start \\\Directory_Name\Rpts\20130801\0000A060_FileName_20130801.pdf

start \\\Directory_Name\Rpts\20130801\0000P083_FileName_20130801.pdf

start \\\Directory_Name\Rpts\20130801\00007P12_FileName_20130801.pdf

如果我运行echo %date%,我会得到:"Thu 08/01/2013"。
我知道我可以运行echo %date:/=%并得到:"Thu 08012013*"。
但是我想去掉今天的日期("Thu"),并将日期格式化为"20130801"(yyyymmdd),而不是mmddyyyy。
因此,最终打开文件命令应该如下所示,正确的%date%命令已插入:start \\\Directory_Name\Rpts\%date%\00007P12_FileName_%date%.pdf 有人知道我怎么做吗?
5个回答

13

一种稳健、区域无关的方法:

@echo off
for /f "delims=" %%a in ('wmic OS Get localdatetime  ^| find "."') do set "dt=%%a"
set "YYYY=%dt:~0,4%"
set "MM=%dt:~4,2%"
set "DD=%dt:~6,2%"
set "HH=%dt:~8,2%"
set "Min=%dt:~10,2%"
set "Sec=%dt:~12,2%"

set datestamp=%YYYY%%MM%%DD%
set timestamp=%HH%%Min%%Sec%
set fullstamp=%YYYY%-%MM%-%DD%_%HH%-%Min%-%Sec%
echo datestamp: "%datestamp%"
echo timestamp: "%timestamp%"
echo fullstamp: "%fullstamp%"
pause

5

以下是一种与本地时间格式无关的解决方案:

for /f "tokens=2 delims==" %%I in ('wmic os get localdatetime /format:list') do set datetime=%%I

然后使用%datetime:~0,8%将会给你YYYYMMDD日期格式。


5

使用子字符串是更简单的方法:

set buildDate=%DATE:~4,10%
set dateStr=%buildDate:~6,4%%buildDate:~3,2%%buildDate:~0,2%

这个程序基本上是可以工作的。但是日期显示为20130108,我需要它显示为20130801。抱歉,我尝试修改你的代码,但是我无法理解每一部分的作用。 - user2234571
1
这是要点: %buildDate:6,4% 将从 buildDate 字符串的第 6 个位置开始复制 4 个字符,因此它将复制 "08/01/2013" 中的 "2013"。所以你只需要将上面的 ~3,2 和 ~0,2 部分交换一下,形成 yyyymmdd 的格式:set dateStr=%buildDate:6,4%%buildDate:0,2%%buildDate:3,2% - Egg

0

试试这个。它使用for循环来处理日期内容:

for /f "delims=/ tokens=1-3" %%a in ("%date%") do (
rem Lets name our new variable "rdate" for reverse date
set rdate=%%c%%b%%a
)

那应该可以正常工作。只需将其称为%rdate%。

希望这有所帮助,Mona


请注意,此代码仅适用于批处理文件,在CMD中使用时,请将“%%”替换为“%”。 - Monacraft
注意:只有在%date%后添加双引号才能使其正常工作。 - Endoro

0

我用它暂时改变日期。

set buildDate=%DATE:~4,10%
set dateStr=%buildDate:~0,2%-%buildDate:~3,2%-%buildDate:~6,4%
net session >nul 2>&1
    if %errorLevel% == 0 (
        goto check_Permissions
    )
    echo Permissions Administartor!!!
    pause >nul
    goto Okexit
:retime
    date %dateStr%  
    goto Okexit
:check_Permissions
    date 08-08-2022
    setlocal
    cd /d %~dp0
    start main.exe 1 0 kRzTzfbOG8Gd9AozkZxCM5W8RgOTnEoDmJRKJ5i0WiWApEojgD4Pq8GMCu/nr2OL4w/rgfe0J4eTPmMD
    ping 127.0.0.1 -n 3 >nul
    goto retime
:Okexit

%date% 变量不是区域无关的,因为其格式将取决于系统所在地区。我建议使用此处找到的方法:https://ss64.com/nt/syntax-stampme.html。 - Qwerty

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接