2016-11-17 2 views
-1

Я работаю со следами тестовых исполнений. Существует один файл (traces/trace.txt), где хранится трассировка последнего теста, и я бы хотел написать сценарий для хранения старых версий этого файла.Использование сценариев .bat для автоматизации копирования файлов

Вот что я сделал:

-created папки для версий файлов «AllTraces»

Я написал сценарий «trace_archive.bat» для копирования файла с следом в эту папку и конкатенациях дата и время на имя:

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" 

Таким образом, в этой папке у меня будет что файлы с такими именами, как это:

  • trace_20161117-095910.txt

  • trace_20161117-105713.txt

  • т.д.

-created папку "LastTrace"

Идея заключается в том, чтобы сохранить копию последней версии трассировки и сравнить трассы/trace.txt с ней. Если есть разница, то теперь мы выполняем новый тест, поэтому мы запускаем trace_archive.txt, чтобы сделать копию AllTraces и заменить trace.txt в LastTrace на текущую версию трасс/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% (

С nodiff и result каждый может содержать пробелы, необходимо "quote both sides", т.е.

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

Обратите внимание, что цитируя причины cmd, чтобы увидеть каждую указанную строку как одну строку.

Но ваш код слишком сложный.

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 множество errorlevel-на матче, 1 на не-матче.Вам понадобится CALL другой пакетный файл - если вы просто EXECUTE, то пакет, то обработка передана этой партии - она ​​вернется только тогда, когда другая партия закончится, если вы CALL.

Смежные вопросы