Войти

Показать полную графическую версию : [решено] поиск и сравнение оригинального и резервной копии (.bak) одного и того же файла


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

Iska
09-10-2011, 16:21
takoff, Ваш вопрос не очень понятен. Попробуйте привести пример с конкретными именами файлов.

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

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

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




© OSzone.net 2001-2012