我有以下代码
set x=%date /T %
date 16/12/2012
date 15/12/2012
some stuff goes here
echo set your date
date %x% <--- getting error in that line.
pause
Run Code Online (Sandbox Code Playgroud)
那么我怎样才能以dd/mm/yy的格式得到日期
您可以使用wmic命令获取日期格式dd/mm/yy .此命令允许您获取当前日期而不受区域设置的影响.
@echo off
SETLOCAL EnableDelayedExpansion
for /f "skip=1 tokens=1-6 delims= " %%a in ('wmic path Win32_LocalTime Get Day^,Hour^,Minute^,Month^,Second^,Year /Format:table') do (
IF NOT "%%~f"=="" (
set /a FormattedDate=10000 * %%f + 100 * %%d + %%a
set FormattedDate=!FormattedDate:~-2,2!/!FormattedDate:~-4,2!/!FormattedDate:~-6,2!
)
)
echo %FormattedDate%
PAUSE
Run Code Online (Sandbox Code Playgroud)
您可以将其保存为date.bat并通过在命令提示符中执行以下命令来运行此批处理文件:
C:\>date.bat
21/01/13
Press any key to continue...
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.
还有两种不依赖于时间设置的方法(均取自:如何独立于本地化获取数据/时间:)。并且两者都可以获得星期几,并且都不需要管理员权限!:
1. MAKECAB - 适用于每个 Windows 系统(速度快,但会创建一个小的临时文件)(foxidrive 脚本):
@echo off
pushd "%temp%"
makecab /D RptFileName=~.rpt /D InfFileName=~.inf /f nul >nul
for /f "tokens=3-7" %%a in ('find /i "makecab"^<~.rpt') do (
set "current-date=%%e-%%b-%%c"
set "current-time=%%d"
set "weekday=%%a"
)
del ~.*
popd
echo %weekday% %current-date% %current-time%
pause
Run Code Online (Sandbox Code Playgroud)
2. ROBOCOPY - 它不是 Windows XP 和 Win 2003 的本机命令,但可以从 Microsoft 站点下载 。但它内置于 Vista 及更高版本的所有内容中:
@echo off
setlocal
for /f "skip=8 tokens=2,3,4,5,6,7,8 delims=: " %%D in ('robocopy /l * \ \ /ns /nc /ndl /nfl /np /njh /XF * /XD *') do (
set "dow=%%D"
set "month=%%E"
set "day=%%F"
set "HH=%%G"
set "MM=%%H"
set "SS=%%I"
set "year=%%J"
)
echo Day of the week: %dow%
echo Day of the month : %day%
echo Month : %month%
echo hour : %HH%
echo minutes : %MM%
echo seconds : %SS%
echo year : %year%
endlocal
Run Code Online (Sandbox Code Playgroud)
还有另外三种使用其他 Windows 脚本语言的方法。它们将为您提供更大的灵活性,例如您可以获得一年中的星期、以毫秒为单位的时间等等。
3. JSCRIPT/BATCH混合(需要另存为.bat)。Jscript 在 NT 及更高版本的每个系统上都可用,作为 Windows 脚本主机的一部分(尽管可以通过注册表禁用,但这种情况很少见):
@if (@X)==(@Y) @end /* ---Harmless hybrid line that begins a JScript comment
@echo off
cscript //E:JScript //nologo "%~f0"
exit /b 0
*------------------------------------------------------------------------------*/
function GetCurrentDate() {
// Today date time which will used to set as default date.
var todayDate = new Date();
todayDate = todayDate.getFullYear() + "-" +
("0" + (todayDate.getMonth() + 1)).slice(-2) + "-" +
("0" + todayDate.getDate()).slice(-2) + " " + ("0" + todayDate.getHours()).slice(-2) + ":" +
("0" + todayDate.getMinutes()).slice(-2);
return todayDate;
}
WScript.Echo(GetCurrentDate());
Run Code Online (Sandbox Code Playgroud)
4. VSCRIPT/BATCH混合(是否可以在不使用临时文件的情况下在批处理文件中嵌入并执行 VBScript?)与 jscript 的情况相同,但混合不是那么完美:
:sub echo(str) :end sub
echo off
'>nul 2>&1|| copy /Y %windir%\System32\doskey.exe %windir%\System32\'.exe >nul
'& echo current date:
'& cscript /nologo /E:vbscript "%~f0"
'& exit /b
'0 = vbGeneralDate - Default. Returns date: mm/dd/yy and time if specified: hh:mm:ss PM/AM.
'1 = vbLongDate - Returns date: weekday, monthname, year
'2 = vbShortDate - Returns date: mm/dd/yy
'3 = vbLongTime - Returns time: hh:mm:ss PM/AM
'4 = vbShortTime - Return time: hh:mm
WScript.echo Replace(FormatDateTime(Date,1),", ","-")
Run Code Online (Sandbox Code Playgroud)
5. POWERSHELL - 可以安装在每台拥有 .net 的计算机上 - 从 Microsoft 下载(v1、v2、v3(仅适用于 win7 及更高版本))。默认安装在 Win7/Win2008 及更高版本的所有计算机上:
C:\>powershell get-date -format "{dd-MMM-yyyy HH:mm}"
Run Code Online (Sandbox Code Playgroud)
6.自编译jscript.net/batch(从未见过没有.net的Windows机器,所以我认为这是一个非常便携的):
@if (@X)==(@Y) @end /****** silent line that start jscript comment ******
@echo off
::::::::::::::::::::::::::::::::::::
::: compile the script ::::
::::::::::::::::::::::::::::::::::::
setlocal
if exist "%~n0.exe" goto :skip_compilation
set "frm=%SystemRoot%\Microsoft.NET\Framework\"
:: searching the latest installed .net framework
for /f "tokens=* delims=" %%v in ('dir /b /s /a:d /o:-n "%SystemRoot%\Microsoft.NET\Framework\v*"') do (
if exist "%%v\jsc.exe" (
rem :: the javascript.net compiler
set "jsc=%%~dpsnfxv\jsc.exe"
goto :break_loop
)
)
echo jsc.exe not found && exit /b 0
:break_loop
call %jsc% /nologo /out:"%~n0.exe" "%~dpsfnx0"
::::::::::::::::::::::::::::::::::::
::: end of compilation ::::
::::::::::::::::::::::::::::::::::::
:skip_compilation
"%~n0.exe"
exit /b 0
****** end of jscript comment ******/
import System;
import System.IO;
var dt=DateTime.Now;
Console.WriteLine(dt.ToString("yyyy-MM-dd hh:mm:ss"));
Run Code Online (Sandbox Code Playgroud)
7. Logman这无法获取年份和星期几。它相对较慢,还会创建一个临时文件,并且基于 logman 在其日志文件上添加的时间戳。适用于 XP 及更高版本的所有内容。可能永远不会任何人都可以使用 - 包括我 - 但还有另一种方式......
@echo off
setlocal
del /q /f %temp%\timestampfile_*
Logman.exe stop ts-CPU 1>nul 2>&1
Logman.exe delete ts-CPU 1>nul 2>&1
Logman.exe create counter ts-CPU -sc 2 -v mmddhhmm -max 250 -c "\Processor(_Total)\%% Processor Time" -o %temp%\timestampfile_ >nul
Logman.exe start ts-CPU 1>nul 2>&1
Logman.exe stop ts-CPU >nul 2>&1
Logman.exe delete ts-CPU >nul 2>&1
for /f "tokens=2 delims=_." %%t in ('dir /b %temp%\timestampfile_*^&del /q/f %temp%\timestampfile_*') do set timestamp=%%t
echo %timestamp%
echo MM: %timestamp:~0,2%
echo dd: %timestamp:~2,2%
echo hh: %timestamp:~4,2%
echo mm: %timestamp:~6,2%
endlocal
exit /b 0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28650 次 |
| 最近记录: |