私は次のコードを持っています
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
では、dd / mm/yyの形式で日付を取得するにはどうすればよいですか。
私は次のコードを持っています
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
では、dd / mm/yyの形式で日付を取得するにはどうすればよいですか。
コマンドを使用して、dd / mm/yyの日付形式を取得できますwmic
。このコマンドを使用すると、地域の設定に影響されることなく現在の日付を取得できます。
@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
date.bat
コマンドプロンプトで次のコマンドを実行することにより、このバッチファイルを名前を付けて保存して実行できます。
C:\>date.bat
21/01/13
Press any key to continue...
お役に立てれば。
時間設定に依存しないさらに2つの方法(どちらもローカリゼーションから独立したデータ/時間を取得する方法:)から取得します。また、どちらも曜日を取得し、管理者権限は必要ありません!:
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
2.ROBOCOPY-これはWindowsXPおよびWin2003のネイティブコマンドではありませんが、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
また、他のWindowsスクリプト言語を使用する3つの方法があります。たとえば、1年の週、ミリ秒単位の時刻などを取得できるなど、柔軟性が高くなります。
3. JSCRIPT / BATCHハイブリッド(として保存する必要が.bat
あります)。Jscriptは、Windowsスクリプトホストの一部として、NT以降のすべてのシステムで使用できます(レジストリを介して無効にすることはできますが、まれなケースです)。
@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());
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),", ","-")
5. POWERSHELL-.netを持つすべてのマシンにインストールできます-Microsoftからダウンロードします(v1、v2、v3(win7以降のみ))。デフォルトでは、Win7/Win2008以降のすべてにインストールされます。
C:\>powershell get-date -format "{dd-MMM-yyyy HH:mm}"
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"));
7. Logmanこれは年と曜日を取得できません。比較的低速で、一時ファイルも作成し、logmanがログファイルに付けるタイムスタンプに基づいています。XP以降のすべてで機能します。おそらく決して機能しません。私を含む誰もが使用しますが、もう1つの方法です...
@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
これは私のシステムでテストされ、日付を必要な形式に設定します。「必要な権限が不足しているか、必要な権限がクライアントに保持されていません」というエラーメッセージが表示された場合は、管理者としてスクリプトを実行してみてください。これで問題なく動作するはずです。
@echo off
set x=%DATE:~0,2%/%DATE:~3,2%/%DATE:~6,4%
echo %x%
set date=%x%
echo %date%
SET x =%date:〜-10%を試しましたか?Windows7で動作することはわかっています。
あなたの割り当てset x=%date /T %
は間違っています。パーセント記号は変数を展開しますが、コマンド置換機能は提供しません。
%DATE%
Windowsには、現在の日付の自動環境変数(%TIME%
現在の時刻の変数も)がすでに用意されているため、次のようにするだけで済みます。
set x=%DATE%
date 16/12/2012
date 15/12/2012
rem stuff
date %x%
pause
デールの答えは私を大いに助けてくれました。私は彼のソリューションを変更して、hhmmdd形式で時間を取得しました。
@echo off
SETLOCAL EnableDelayedExpansion
rem Fill variables: %%a=Day %%b=Hour %%c=Minute %%d=Month %%e=Second %%f=Year
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"=="" (
rem Adding leading zeros:
set /a FormattedTime=1000000 + 10000 * %%b + 100 * %%c + %%e
rem reading from the right to left:
set FormattedTime=!FormattedTime:~-6,2!!FormattedTime:~-4,2!!FormattedTime:~-2,2!
)
)
echo %FormattedTime%
私はこれが古い投稿であることを知っていますが、wmicなしでそれを行う方法を見つけました:
最初に、私はある種の答えを見つけて、それを処理します。
あなたはこれを試すことができます!これはWindowsマシンで機能するはずです。
for / F "usebackq tokens = 1,2,3 delims =-" %% I IN(
echo %date%
)do echo "%% I" "%% J" "%% K" https://stackoverflow.com/a/14820126 / 3735825
それから私はこれで働き、これをしました:
for /F "usebackq tokens=1,2,3,4 delims=/, " %%I IN (`echo %date%`) do ECHO %%L-%%K-%%J
%date%コマンドからスペースと区切り文字を削除し、日付の任意の種類の部分を変数として使用できるようにします。たとえば、日付をYYYYMMDDに設定する場合、コードは次のようになります。
for /F "usebackq tokens=1,2,3,4 delims=/, " %%I IN (`echo %date%`) do ECHO %%L%%K%%J
変数だけが必要で、必要に応じて使用する必要がある場合は、次の変数で遊ぶことができます。
%%I = Day of Week
%%J = Day
%%K = Month
%%L = Year
私はそれが誰かを助けることを願っています。
次のコードは私のために働きます:
set DATE_NOW=!date:~6,4!!date:~0,2!!date:~3,2!
set TIME_NOW=!time:~0,2!!time:~3,2!!time:~6,2!
echo %DATE_NOW%
echo %TIME_NOW%
私の場合、2019年5月9日ではなく、YYYY-MM-DD形式の日付が必要です。だから私はmakecabでnpocmakaからの普遍的な決定を変更します:
@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-year=%%e"
set "current-month=%%b"
set "current-day=%%c"
set "current-time=%%d"
set "weekday=%%a"
)
del ~.*
popd
CALL :CASE_%current-month%
IF ERRORLEVEL 1 CALL :DEFAULT_CASE
ECHO Done.
GOTO NEXT
:CASE_Jan
set "current-month=01"
GOTO END_CASE
:CASE_Feb
set "current-month=02"
GOTO END_CASE
:CASE_Mar
set "current-month=03"
GOTO END_CASE
:CASE_Apr
set "current-month=04"
GOTO END_CASE
:CASE_May
set "current-month=05"
GOTO END_CASE
:CASE_Jun
set "current-month=06"
GOTO END_CASE
:CASE_Jul
set "current-month=07"
GOTO END_CASE
:CASE_Aug
set "current-month=08"
GOTO END_CASE
:CASE_Sep
set "current-month=09"
GOTO END_CASE
:CASE_Oct
set "current-month=10"
GOTO END_CASE
:CASE_Nov
set "current-month=11"
GOTO END_CASE
:CASE_Dec
set "current-month=12"
GOTO END_CASE
:DEFAULT_CASE
set "current-month=xx"
echo "Month is not in the English language! Fix it!"
GOTO END_CASE
:END_CASE
VER > NUL # reset ERRORLEVEL
GOTO :EOF # return from CALL
:NEXT
echo %weekday% %current-year%-%current-month%-%current-day% %current-time%
pause
WindowsXPSP3およびServer2008R2SP1でテスト済み。