2016-11-17 10 views
-1

私は痕跡のテストを実行しています。 1つのファイル(traces/trace.txt)があり、最後のテストのトレースが保存されています。このファイルの古いバージョンを保存するスクリプトを作成したいと思います。.batスクリプトを使用してファイルのコピーを自動化する

は、私がこのフォルダにトレースしてファイルをコピーし、連結のためのスクリプト「trace_archive.bat」を書いている

を「AllTracesを」ファイルバージョンのフォルダを-created:ここ

は、私がやったものです名に日付と時刻は:

    set source=c:\some_path\traces\trace.txt 
    set destination=c:\somepath\AllTraces\ 
    xcopy %source% %destination% /y 
    cd %destination% 
    for /f "tokens=2 delims==" %%I in ('wmic os get localdatetime /format:list') do set datetime=%%I 
    set datetime=%datetime:~0,8%-%datetime:~8,6% 
    ren "trace.txt" "trace_%datetime%.txt" 
    

    ので、このフォルダに私はこのような名前のファイルを持っています

  • など

はアイデアがコピーを格納することです

をフォルダ "LastTraceを" -created trace_20161117-105713.txt 0

  • trace_20161117-095910.txt

  • 最後のバージョンのトレースをそこに置き、トレース/ trace.txtをそれと比較します。違いがある場合は、新しいテストが実行されたので、trace_archive.txtを起動してAllTracesにコピーし、LastTraceのtrace.txtをtrace/trace.txtの現在のバージョンに置き換えます。 だから、私はスクリプト「TraceTrigger.bat」を作成しました:

    set noDiff = "FC: no differences encountered" 
    FOR /F "tokens=* USEBACKQ" %%F IN (`fc /b C:\some_path\AllTraces\LastTrace\trace.txt c:\some_path\traces\trace.txt`) 
    DO (
    SET result=%%F 
    ) 
    if NOT %noDiff% == %result% (
    c:some_path\scripts\trace_archive.bat 
    del /f c:sope_path\AllTraces\LastTrace\trace.txt 
    xcopy c:\Users\akomedat\AppData\Local\Temp\.FLT\traces\trace.txt c:Users\akomedat\AllTraces\LastTrace\ 
    ) 
    

    予想通り、このスクリプトは動作しません。確かに、それはtrace_archive.batを実行せず、ファイルをAllTracesにコピーしません。ここに私が得ている出力はあります:

    C:\some_path\scripts>TraceTrigger.bat 
    
    C:\some_path\scripts>set noDiff = "FC: no differences encountered" 
    
    C:\some_path\scripts>FOR /F "tokens=* USEBACKQ" %F IN (`fc /b C:\some_path\AllTraces\LastTrace\trace.txt c:\some_path\tra 
    ces\trace.txt`) DO (SET result=%F) 
    
    C:\some_path\scripts>(SET result=Comparing files C:\some_path\ALLTRACE 
    S\LASTTRACE\trace.txt and C:\some_path\TRACES\TRACE 
    .TXT) 
    
    C:\some_path\scripts>(SET result=FC: C:\some_path\ALLTRACES\LASTTRACE\ 
    trace.txt longer than C:\some_path\TRACE.TXT 
    ) 
    C:\some_path\ALLTRACES\LASTTRACE\trace.txt was unexpected at this time. 
    
    C:\some_path\scripts>if NOT == FC: C:\some_path\ALLTRACES\LASTTRACE\t 
    race.txt longer than C:\some_path\TRACES\TRACE.TXT 
    (
    

    TraceTrigger.batを修正するには?

  • 答えて

    1

    実際にはのコードでは、切り取りと貼り付けが常に適切です。手動編集(some_path/so p e_path)は、野生のガチョウの追跡を開始することができます。あなたのコードで

    少なくとも一つの問題は、この行である:

    if NOT "%noDiff%"=="%result%" (
    

    注すなわち、

    if NOT %noDiff% == %result% (
    

    nodiff及び各スペースを含むことresultので、あなたが"quote both sides"する必要があることを引用原因cmdを使用して、引用符付きの各文字列を1つの文字列として表示します。

    しかし、あなたのコードはあまりにも複雑です。

    fc /b C:\some_path\AllTraces\LastTrace\trace.txt c:\some_path\traces\trace.txt >nul 
    if errorlevel 1 (
        echo files did not match 
        CALL c:some_path\scripts\trace_archive.bat 
        del /f c:sope_path\AllTraces\LastTrace\trace.txt 
        xcopy c:\Users\akomedat\AppData\Local\Temp\.FLT\traces\trace.txt c:Users\akomedat\AllTraces\LastTrace\ 
    ) else (
        echo files matched 
    ) 
    

    fcセット不一致にマッチで0からerrorlevel、1。他のバッチファイルCALLが必要です。単純にEXECUTEバッチの場合、処理はになります。はそのバッチに転送されます。CALLの場合は他のバッチが終了したときにのみ戻ります。

    関連する問題