2017-09-05 28 views
0

私はStartDate(今日)とEndDate(昨日)を取得しようとしています。私は日のために正しくフォーマットされた数を維持しようとしています。私は気付いたが、システムは先行ゼロがあり、 "09"のようなものから1を引いたときに失敗するが、 "10"で完璧に働くときは好きではない。これを修正するにはどうすればいいですか?今日の日付と時刻を取得する

echo off 

REM CurrentDate (END DATE)  ------------------------------------------------------------- 
Set dd=%date:~4,2% 
Set mm=%date:~7,2% 
Set yyyy=%date:~10,4% 
set END_DATE=%yyyy%-%mm%-%dd% 00:00 AM 

echo %END_DATE% 

REM CurrentDate - 1 (START DATE) ------------------------------------------------------------ 
set m1dd=%date:~4,2% 
set m1dd=09 
echo %m1dd% 
set /A m1dd -= 1 
echo %m1dd% 
Set m1dd=0%m1dd% 
echo %m1dd% 
Set m1dd=%m1dd:~-2% 
echo %m1dd% 
set START_DATE=%yyyy%-%mm%-%m1dd% 00:00 AM 

echo %START_DATE% 

pause 
+1

説明をしてください、私は将来的に、より良い質問を学ぶ&作成できるように?ありがとう。 – Amasian21

+1

何かが開始する前にどうすれば終了できますか? – Compo

+0

主に投稿する前にトピックを調査し、上記の検索ボックスに 'batch yesterday'と入力すれば十分な結果が得られます。 – LotPings

答えて

1

をこのバッチファイルには、日付ことを検証するためにXCOPYコマンドを使用して、ちょっとしたトリックを使用していますあなたがYYYYMMDDから1を引いているので、実際には有効な日付です。

@echo off 
setlocal 
set rand=%random% 
md "dummy%rand%\empty%rand%" 

for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a" 

set /a y=%dt:~0,4% 
set /a m=1%dt:~4,2% 
set /a d=1%dt:~6,2% 

REM set the number of days to substract 
SET DAYS=1 
FOR /L %%G IN (1,1,%days%) DO CALL :loop 

set subdate=%y%%m:~-2%%d:~-2% 
echo Today is: %dt:~0,8% 
echo Yesterday was: %subdate% 

rd /s /q "dummy%rand%" 
pause 
endlocal 
GOTO :EOF 

:loop 
    set /a d-=1 

    if %d% lss 101 (
    set d=131 
    set /a m-=1 

    if %m% lss 101 (
     set m=112 
     set /a y-=1 
    ) 
) 

xcopy /d:%m:~-2%-%d:~-2%-%y% /t "dummy%rand%\empty%rand%" "dummy%rand%" >nul 2>&1 || goto loop 

GOTO :EOF 

あなたのバッチファイルからPowerShellを利用することができる出力

Today is: 20170905 
Yesterday was: 20170904 
Press any key to continue . . . 
-3

私はあなたがYYYY/MM/DDにシステムの日付/時刻の形式を変更すべきだと思う

Refer this post

0

日付の計算を行う方法が理想的ではありません。より良い日付計算のために、これはlinkを参照することができます。

あなたは自分の現在のコードの実行を作るために簡単な修正を探している場合は、次のように単純に先行ゼロを削除します。

echo off 

REM CurrentDate (END DATE)  ------------------------------------------------------------- 
Set dd=%date:~4,2% 
Set mm=%date:~7,2% 
Set yyyy=%date:~10,4% 
set END_DATE=%yyyy%-%mm%-%dd% 00:00 AM 

echo %END_DATE% 

REM CurrentDate - 1 (START DATE) ------------------------------------------------------------ 
set m1dd=%date:~4,2% 
set m1dd=09 
set /a m1dd=100%m1dd% %% 100 
echo %m1dd% 
set /a m1dd -= 1 
echo %m1dd% 
Set m1d=0%m1dd% 
echo %m1dd% 
Set m1d=%m1dd:~-2% 
echo %m1dd% 
set START_DATE=%yyyy%-%mm%-%m1dd% 00:00 AM 

echo %START_DATE% 

pause 
1

:ダウン投票

@Echo Off 
Set "TS=.ToString('yyy-MM-dd') + \" 00:00 AM\"" 
For /F "UseBackTokens=1*[email protected]" %%A In (` 
    PowerShell "(Get-Date)%TS% + \"@\" + (Get-Date).AddDays(-1)%TS%"` 
) Do Set "TD=%%A" & Set "YD=%%B" 
Echo %%TD%% = %TD% 
Echo %%YD%% = %YD% 
Timeout -1 
+0

難読化や短絡のための '%TS%'はありますか? – LotPings

関連する問題