2

わかりました。私はRobVander Woude yesterday.batコードを、他の投稿の助けを借りてここにまとめたコードと一緒に使用しています。

昨日の日付で存在するかどうかを最初に確認したいファイルがあります。trueの場合は、他の処理を行います。私が立ち往生している問題は、ファイルの日付を「昨日の」日付と比較することです。それらを画面にエコーすると、どちらもまったく同じように見えますが、バッチファイルにはそうではないと書かれています。コードの最初の部分はyesterday.batからのもので、コードを挿入する場所を示しています。どんなガイダンスでも大歓迎です。

Display the results
ECHO Format:     YYYYMMDD  (%LocalFormat%)
ECHO.==================================
CALL ECHO Yesterday:  %SortYest%  %yLocal%
ECHO Today:      %SortDate%  %Today%

:: Check if file gams1bu from yesterday exists
SET filename="B:\data\backup\gams1bu" 
IF NOT EXIST %filename% GOTO log 
FOR %%f IN (%filename%) DO SET filedatetime=%%~tf 

::This displays the results of the two variables
CALL ECHO %yLocal%
CALL ECHO %filedatetime:~0,-10%


IF %filedatetime:~0,-10% == %yLocal% goto same

goto notsame

:same
echo Dates the same, do some code here

goto next

:notsame
echo Dates NOT the same, do some code here  

これを実行すると日付は同じように見えますが、バッチファイルは:notsame????に移動します。

4

1 に答える 1

1

SET filename="B:\data\backup\gams1bu" 
IF NOT EXIST %filename% GOTO log 
FOR %%f IN (%filename%) DO SET filedatetime=%%~tf 

私のプロンプト(cmd.exe)でfiledatetimeを設定していないようです

これにより、YYYYMMDD 20121128 の形式で現在の日付が得られます。

for /F "tokens=2-4 delims=/ " %i in ('date /t') do SET datestamp=%k%i%j
SET datestamp=20121128


C:\>echo %datestamp%
20121128

(元のコマンドは:)

http://www.sprint.net.au/~terbut/usefulbox/msdoscmds.htm

やあ

ファイルの日付を YYYYMMDD 形式で取得する必要がある場合は、次のようにします。

ファイルの名前が FILE_YOU_NEED.txt であるとします。

for %a in (FILE_YOU_NEED.txt) do set FileDate=%~ta
for /F "tokens=1-3 delims=/ " %i in ('echo %FileDate%') do SET datestamp=%k%i%j

filedatetime 変数に日付と時刻の両方がある場合、時刻ではなく日付のみを持つ変数を比較してみてください。

set FILEDATETIME=12/02/2012 13:45

echo %FILEDATETIME%
12/02/2012 13:45

set FILEDATEONLY=%FILEDATETIME:~0,10%

echo %FILEDATEONLY%
12/02/2012
于 2012-11-28T17:57:13.547 に答える