Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] поиск и сравнение оригинального и резервной копии (.bak) одного и того же файла (http://forum.oszone.net/showthread.php?t=217524)

takoff 09-10-2011 15:49 1769419

поиск и сравнение оригинального и резервной копии (.bak) одного и того же файла
 
Доброго всем времени суток. Очень нужна помощь. Нужно организовать не просто поиск файла, а еще и поиск его резервной копии, затем сравнить их и вывести результат сравнения в Блокнот. Сравнение я могу организовать самостоятельно, не совсем ясно как определить резервную копию и где именно ее искать. Имя резервной копии файла передается в качестве пакетного параметра. Если оригинальный файл найден, то осуществляется его сравнение с резервной копией. Если не найден, то выводится сообщение в тот же блокнот о том, что файл не найден. Получается надо сравнивать по датам? Но ведь имя-то одинаковое..Очень бы помог готовый код. Заранее спасибо.

Iska 09-10-2011 16:21 1769448

takoff, Ваш вопрос не очень понятен. Попробуйте привести пример с конкретными именами файлов.

takoff 09-10-2011 17:14 1769473

Задание, которое мне дали звучит дословно следующим образом:
Создать акетный файл, предназначенный для организации процесса поиска и сравнения оригинального и резервной копии (.bak) одного и того же файла. Имя резервной копии файла передается в качестве пакетного параметра. Если оригинальный файл найден, то осуществляется его сравнение с резервной копией. Отличия, найденные при сравнении, передаются в отчет, который, в автоматическом режиме загружается в текстовый процессор "Блокнот".
Думаю, что есть например файл 1.bak и его копия, имеющая такое же имя и расширение, только созданная в другое время. Думаю, что надо найти все файлы с таким именем и сравнить их по дате, самый ранний - исходный. Если найдено более 1 файла (если 1, то - только тот, который и является исходным или, например, является копией, а исходный был удален), то сравниваем содержимое самого позднего(копия) и самого раннего(исходный) функцией fc и выводим результат в Блокнот. Меня мучает вопрос, а будет ли сравниваться дата создания файлов или дата их последнего изменения..

Iska 10-10-2011 00:30 1769765

Цитата:

Цитата takoff
Если оригинальный файл найден, »

Думаю, раз это задание, тут должно быть проще. Никакого «поиска» не нужно. Достаточно найти первый файл с тем же именем, что и резервная копия, и сравнить их. Вряд ли предполагалось под «найден» нечто более серьёзное.

Т.е., примерно так:
читать дальше »
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sBakFile=%~1

if not defined sBakFile (
        call :Usage
        exit /b 1
)

if /i "%~x1" neq ".bak" (
        echo [%sBakFile%] is not a backup file
        call :Usage
        exit /b 2
)

if not exist "%sBakFile%" (
        echo Not found [%sBakFile%]
        exit /b 3
)

set sOrigFileName=%~n1

if not exist "%sOrigFileName%.*" (
        echo Not found any original file for backup file [%sBakFile%]
        exit /b 4
)

call :GetTemporaryName

for /f %%i in ("%sOrigFileName%.*") do (
        fc.exe /l "%%i" "%sBakFile%" 1>"%TemporaryName%"
        start /wait "" "notepad.exe" "%TemporaryName%"
        del /f /q "%TemporaryName%"
        goto :Break
)
:Break

endlocal
exit /b 0
rem ==========================================================================

rem ==========================================================================
:Usage
        echo Usage: %~nx0 ^<Backup file name^>
        exit /b 0
rem ==========================================================================

rem ==========================================================================
rem Функция GetTemporaryName()
rem
rem Серый форум / CMD/BAT: генерация пути для временного файла или папки
rem (http://forum.script-coding.com/viewtopic.php?id=6259)
rem ==========================================================================
:GetTemporaryName
        setlocal enableextensions enabledelayedexpansion

:NextName
        set sTempName=%temp%\temp%random%.tmp

        if exist "%sTempName%" goto :NextName

        set sProcName=%~0

        endlocal & set %sProcName:~4%=%sTempName%
        exit /b 0
rem ==========================================================================


Для чего-либо более серьёзного недостаточно исходных данных.

takoff 11-10-2011 07:32 1770610

Большое спасибо, Iska, уже разобралась, просто сама не совсем правильно интерпретировала задание, все оказалось еще проще:
я заточила код на частную ситуацию, когда резервная копия файла, например Name1.txt называется Name1.txt.bak, а потом в аргумент функции FC включила модификатор, отрезающий расширение и использующий только имя файла Name1.txt
fc %1 %~n1>CompareResult.txt
%1- это Name1.txt
%~n1- это Name1.txt.bak
CompareResult.txt- файл с результатом


Время: 20:26.

Время: 20:26.
© OSzone.net 2001-