dポイントプレゼントキャンペーン実施中!

コマンドでファイルコピーする際の日時比較

フォルダAにTEST.TXT(…(1))、フォルダBにもTEST.TXT(…(2))というファイルがあります。
コマンドでフォルダBからフォルダAにコピーする際、
(1)と(2)の更新日時を比較し、(1)のファイルの方が古かったら、
(1)をリネームし、(2)をコピーするという処理を行いたいのですが、可能でしょうか?
(更新日時が同じ場合は何もしない。)

使用上のOSはXP Proです。
宜しくお願い致します。

A 回答 (5件)

No.4です。

先程の投稿、文字化けしている部分があるようなので再度投稿します。

:補足の条件に沿ったバッチのサンプルです。XP Proで動作確認しました。
:
:------------------------------------------------------------------ sample.bat
echo off
set from=C:\B
set to=C:\A
set fname=test.txt

for %%x in ( "%from%\%fname%" ) do set from_t=%%~tx
for %%x in ( "%to%\%fname%" ? ) do set to_t=%%~tx

if "%to_t%" GEQ "%from_t%" goto :END
ren "%to%\%fname%" "%fname%_%DATE:/=%"
copy "%from%\%fname%" "%to%\%fname%"

:END
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。

無事、処理する事が出来ました!
ありがとうございました!

お礼日時:2010/08/10 18:00

:補足の条件に沿ったバッチのサンプルです。

XP Proで動作確認しました。
:
:------------------------------------------------------------------ sample.bat
echo off
set from=C:\B
set to=C:\A
set fname=test.txt

for %%x in ( "%from%\%fname%" ) do set from_t=%%~tx
for %%x in ( "%to%\%fname%" ? ) do set to_t=%%~tx

if "%to_t%" GEQ "%from_t%" goto :END
?? ren "%to%\%fname%" "%fname%_%DATE:/=%"
?? copy "%from%\%fname%" "%to%\%fname%"

:END
    • good
    • 0

対象フォルダをどのように得るかですが、とりあえず


コマンドラインパラメータとしてみました。
他にBrowseForFolderを使う、定数決め打ち等も
考えられます。

Const FileName = "TEST.TXT"
Dim FSO, OldF, NewF
Dim OldDir, NewDir
Dim Msg, Pth, TD, NM

SetDir '★フォルダ名取得
Set FSO = CreateObject("Scripting.FileSystemObject")
Pth = NewDir & FileName
On Error Resume Next
Set NewF = FSO.GetFile(Pth)
If Err.Number <> 0 Then
    Msg = Pth & "が見つかりません"
    WScript.Echo Msg
    WScript.Quit 1
End If
Pth = OldDir & FileName
Set OldF = FSO.GetFile(Pth)
On Error GoTo 0
If Not IsEmpty(OldF) Then '★旧ファイルが存在する場合
    If OldF.DateLastModified >= NewF.DateLastModified Then
        WScript.Quit 0 '★旧ファイルの日付が新しい場合
    End If
    '★リネーム用の文字列を編集
    TD = Date
    NM = "_" & Year(TD)
    NM = NM & Right("0" & Month(TD), 2)
    NM = NM & Right("0" & Day(TD), 2)
    If FSO.FileExists(Pth & NM) Then
        FSO.DeleteFile Pth & NM '★同名ファイルがあれば削除
    End If
    FSO.MoveFile Pth, Pth & NM '★リネーム
End If
FSO.CopyFile NewDir & FileName, Pth '★コピー
WScript.Quit 0
'*********************
'* フォルダ名設定
'*********************
Sub SetDir()
If WScript.Arguments.Count <> 2 Then
    Msg = "使用方法:"
    Msg = Msg & vbNewLine
    Msg = Msg & " CustCopy.vbs 旧フォルダ 新フォルダ"
    WScript.Echo Msg
    WScript.Quit 1
End If
OldDir = WScript.Arguments(0)
NewDir = WScript.Arguments(1)
If Right(NewDir, 1) <> "\" Then NewDir = NewDir & "\"
If Right(OldDir, 1) <> "\" Then OldDir = OldDir & "\"
End Sub
    • good
    • 0

以下の点が不明です。



(1)A\TEST.TXTの日付 ≧ B\TEST.TXTの日付
 この場合は「何もしない」で良いか?
(2)上記以外の場合
 A\TEST.TXTをRenameするとあるが、名前の
 ルールはどのようになるか?
 つまり、Renameしようとするファイルが既に
 存在していた場合について記述が無い。
(3)サブフォルダは処理しなくてよいか?

Scriptを使えば簡単にできると思います。

この回答への補足

(1)何もしないで良いです。
 基本的にはA\TEST.TXTの方が古い事はないです。

(2)リネームする際は、TEST.TXT_YYYYMMDDとします。
 一日一回のコピー処理なので、既に存在する事はないと思います。

(3)サブフォルダは処理しなくて良いです。
 コピーするのはひとつのファイルだけです。

宜しくお願い致します。

補足日時:2010/08/10 09:04
    • good
    • 0

使用するプログラム言語は何ですか?

この回答への補足

BATかVBScriptで処理したいと考えております。

補足日時:2010/08/10 09:00
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!