0

日付の範囲のレポートを生成する program.exe を実行する必要があります。コマンド ラインで program.exe を呼び出しますが、呼び出すときに 2 つの引数 (現在の日付current_date-6days )を設定する必要があります。

c:\program.exe current_date current_date-6 (date before 6 days)

このコマンドで現在の日付が得られることがわかりました: 28-06-2013 %date:~0,2%-%date:~-7,2%-%date:~-4,4%

しかし、 current_date -6を取得できません(6 日前の日付を意味します)

また、ユーザーが希望する日付の範囲を選択できるようにする必要があります...

プログラムの実行を続行する方法 1) 2 つのパラメーター (たとえば、現在の日付と 6 日前の日付) を指定して自動的に (Windows スケジュール) 2) 同時に手動で、ユーザーに次の可能性を与える日付範囲の選択

@echo off

set /a currd=%date:~0,2%
set /a currm=%date:~3,2%
set /a curry=%date:~6,4%

set /a d=%date:~0,2%
set /a m=%date:~3,2%
set /a y=%date:~6,4%

FOR %%A IN (1 2 3 4 5 6) DO (
    :loop
      set /a d-=1

      if %d% LSS 1 (
        set d=1
        set /a m-=1

        if %m% LSS 1 (
          set m=12
          set /a y-=1
        )
      )
    xcopy /d:%m%-%d%-%y% /l . .. >nul 2>&1 || goto loop
)

start /WAIT /B "" "C:\MyPGM.exe" "%d%-%m%-%y%" "%currd%-%currm%-%curry%"

2013 年 6 月 28 日については問題ありませんが、2013 年 1 月 7 日については「文字列が有効な DateTime として認識されませんでした」というエラーが表示されます。

4

3 に答える 3

3

この VBS スクリプトには、日付 - 6 と今日を表示する機能があります。

起動してヘルプを表示します。

:: Date foward & backward
@echo off
if "%~2"=="" (
echo to get todays date use         call "%~n0" today 0
echo to get yesterdays date use     call "%~n0" today -1
echo to get 25 days before 19441213 call "%~n0" 1944/12/13 -25
echo to get 1250 days in the future call "%~n0" today 1250
echo.
echo Add a third parameter if you want a separator in the date string
echo EG: to use - as in YYYY-MM-DD for today's date
echo     call "%~n0" today 0 -
echo.
pause
goto :EOF)

set date1=%1
set qty=%2
set separator=%~3
if /i "%date1%" EQU "TODAY" (set date1=now) else (set date1="%date1%")
echo >"%temp%\%~n0.vbs" s=DateAdd("d",%qty%,%date1%)
echo>>"%temp%\%~n0.vbs" WScript.Echo year(s)^&_
echo>>"%temp%\%~n0.vbs"         right(100+month(s),2)^&_
echo>>"%temp%\%~n0.vbs"         right(100+day(s),2)
for /f %%a in ('cscript //nologo "%temp%\%~n0.vbs"') do set result=%%a
del "%temp%\%~n0.vbs"
endlocal& set day=%result:~0,4%%separator%%result:~4,2%%separator%%result:~6,2%
echo %%day%% is set to "%day%" (without the quotes)
pause
于 2013-06-28T16:22:22.807 に答える
0

他の言語を使えば、これ (日付操作) を非常に簡単に行うことができます。Perl、Python、および Powershell の例を次に示します。

@ECHO OFF
SETLOCAL

SET PERL_CMD=perl -MPOSIX -e "print(POSIX::strftime(q(%%d-%%m-%%Y),localtime(time()-6*86400)));"
FOR /F %%d IN ('%PERL_CMD%') DO SET PREV_DATE=%%d
ECHO %PREV_DATE%

SET PYTHON_CMD=py -3 -c "from datetime import *; print((datetime.now()+timedelta(days=-6)).strftime('%%d-%%m-%%Y'));" 
FOR /F %%d IN ('%PYTHON_CMD%') DO SET PREV_DATE=%%d
ECHO %PREV_DATE%

SET POWERSHELL_CMD=powershell -NoProfile -Command "Get-Date ((Get-Date).AddDays(-6)) -format dd.MM.yyyy"
FOR /F %%d IN ('%POWERSHELL_CMD%') DO SET PREV_DATE=%%d
ECHO %PREV_DATE%

絶対にバッチ/CMDで実行する必要がある場合は、日付文字列を解析し、日、月、年の値を計算することで(ほとんどの場合)実行できます。

于 2013-06-28T14:09:49.463 に答える