CMD/BAT - [решено] поиск и сравнение оригинального и резервной копии (.bak) одного и того же файла

Ответить
Аватара пользователя
takoff

CMD/BAT - [решено] поиск и сравнение оригинального и резервной копии (.bak) одного и того же файла

Сообщение takoff »

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

Re: CMD/BAT - [решено] поиск и сравнение оригинального и резервной копии (.bak) одного и того же файла

Сообщение Iska »

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

Re: CMD/BAT - [решено] поиск и сравнение оригинального и резервной копии (.bak) одного и того же файла

Сообщение Iska »

Задание, которое мне дали звучит дословно следующим образом:

Создать акетный файл, предназначенный для организации процесса поиска и сравнения оригинального и резервной копии (.bak) одного и того же файла. Имя резервной копии файла передается в качестве пакетного параметра. Если оригинальный файл найден, то осуществляется его сравнение с резервной копией. Отличия, найденные при сравнении, передаются в отчет, который, в автоматическом режиме загружается в текстовый процессор "Блокнот".

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

Re: CMD/BAT - [решено] поиск и сравнение оригинального и резервной копии (.bak) одного и того же файла

Сообщение Iska »

Цитата takoff:



Если оригинальный файл найден,
CMD/BAT - [решено] поиск и сравнение оригинального и резервной копии (.bak) одного и того же файла




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



Т.е., примерно так:


читать дальше »




Код:

Код: Выделить всё

@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 ^
	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

Re: CMD/BAT - [решено] поиск и сравнение оригинального и резервной копии (.bak) одного и того же файла

Сообщение takoff »

Большое спасибо, Iska, уже разобралась, просто сама не совсем правильно интерпретировала задание, все оказалось еще проще:

я заточила код на частную ситуацию, когда резервная копия файла, например Name1.txt называется Name1.txt.bak, а потом в аргумент функции FC включила модификатор, отрезающий расширение и использующий только имя файла Name1.txt

fc %1 %~n1>CompareResult.txt

%1- это Name1.txt

%~n1- это Name1.txt.bak

CompareResult.txt- файл с результатом
Ответить

Вернуться в «Скриптовые языки администрирования Windows»