システム内の日付変数文字列のレイアウトは、ユーザーからの設定、地域や言語によって想定できるため、日付は100%予測可能なレイアウトではありません。
wmic OS Get localdatetime /value
結果は100%予測可能であるため、使用してみてください。
LocalDateTime=20190609123708.733000-180
したがって、forループを使用して、、=.
(equalとdot)のような2つの区切り文字を追加すると、次の文字列出力が得られます。
20190609123708
。
このコマンドのレイアウトは予測可能であり、地域の設定、ユーザー設定、またはシステム言語に関係なく機能するため、コマンドは常に次の値を返します。
set _date=20190609123708
rem :: %_date:~0,4%_%_date:~4,2%_%_date:~6,2%
rem :: year:2019 | month:06 | day:09
バットファイル:
@echo off & for /f "tokens=2delims==." %%i in ('wmic OS Get localdatetime /value ^|findstr /r [0-9]')do set "_date=%%i" & echo/%_date:~0,4%%_date:~4,2%%_date:~6,2%
コマンドライン:
for /f "tokens=2delims==." %i in ('wmic OS Get localdatetime /value ^|findstr /r [0-9]')do set "_data=%i" & mkdir %_date:~0,4%_%_date:~4,2%_%_date:~6,2%
このコマンドの結果::
20190609
私も提案することができます:
wmic Path Win32_LocalTime Get Day,Month,Year
ループ中:
@echo off & setlocal enabledelayedexpansion & set "_do=wmic Path Win32_LocalTime Get Day^,Month^,Year"
for /f "tokens=1-3delims= " %%a in ('!_do!^|findstr /r [0-9]')do set "y=%%c" & set "d=0%%a" & set "m=0%%b"
echo/!y!!m:~-2!!d:~-2! >nul
結果:
Day Month Year
9 6 2019
%%a %%b %%c
月/日の数が9未満の場合、差はゼロではないため、このバットを使用して、この場合の先行ゼロを設定できます。
@echo off & setlocal enabledelayedexpansion & set "_do=wmic Path Win32_LocalTime Get Day^,Month^,Year"
for /f "tokens=1-3delims= " %%a in ('!_do!^|findstr /r [0-9]')do set "y=%%c" & set "d=0%%a" & set "m=0%%b"
echo/!y!!m:~-2!!d:~-2!
YearMonthDayの結果:
20190609
Obs .: PowerShellでは、次の方法でレイアウトを簡単にカスタマイズできます。
ToString("yyyyMMdd")
文字列は。で設定できますToString
。
サンプル: yyyy-MM-dd, dd-MM-yyyy, MM-dd-yyyy, MM_dd_yyyy, yyyy_MM_dd, etc..
Powershellコマンド:
$(Get-Date).ToString("yyyyMMdd")
結果:
2010609
バッチでの日付変数レイアウト出力の詳細については、こちらをご覧ください。
当日の月と年をバッチで取得する安全な方法
バッチファイルと地域設定/ロケールでの日付の解析
更新-上記のコメント/観察をバットにどのように適用するか、つまり、この質問のコードを理解した場合:
@echo off & setlocal enabledelayedexpansion
set "Fileone=File1.txt" & set "FileTwo=File2.txt"
set "_both=!FileOne!-!FileTwo!" & rem cd /d "D:\Board\Broadcast\FA_Report8_A"
set "_path_back=%__CD__%" & rem :: you can use this "%__CD__%" or pushd "D:\Board\Broadcast\FA_Report8_A"
for /f "tokens=2delims==." %%i in ('wmic OS Get localdatetime /value ^|findstr /r [0-9]')do set "_date=%%i"
set _now=!_date:~0,4!!_date:~4,2!!_date:~6,2! & for /f "tokens=1*delims=-" %%i in ('echo/!_both!')do (
call :compare "%%~fi" & call :compare "%%~fj" & if !_dt_file_2! gtr !_dt_file_2! (
echo/ FileOne Greater - run bat & timeout /t 20 /nobreak & goto :run_bat
) else (echo/ FileOne not Greater - Finish & goto Finish)
)
:compare
set "_file=" & set "_file=%~1"
for /f "tokens=1delims=. " %%d in ('wmic datafile where name^='!_file:\=\\!' get LastModified ^|findstr /v "LastModified"')do (
if "!_dt_file_1!./" == "./" (set _dt_file_2=%%d) else (set _dt_file_2=%%d)
) & exit /b
:run_bat
call the_bat_to_run.cmd
:Finish
echo/Finished
私の限られた 英語でごめんなさい...