Baltazar500
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору los Цитата: Код: 7zz l -slt foo.rar | awk '/Path = /{gsub(/Path = /,""); n=$0} /CRC = /{if(n) print $3, n}' | | Вариант рабочий, но нет фильтрации каталог/не каталог, как у меня, дабы исключить мусор в конечном файле и ошибки при чекинге. Немного помаялся, попытавшись совместить со своим (дабы исключить sed), да забил. Мой варинт тоже вполне рабочий оказался. Просто надо фильтровать выхлоп 7z напрямую, без участия for BorlandIMHO Цитата: setlocal - чтобы работало присвоение в цикле. Первые два if - проверка аргумента copy создаёт результирующий файл, после два echo пишут в этот файл коммент и пустую строку pushd делает текущей директорию с архивом Далее 7z даёт выхлоп в файл и в цикле идёт его разбор: находим имя, загоняем в переменную, находим CRC, выводим в результитующий файл CRC и имя. | Понятно Цитата: В первом варианте было `"c:\Program Files\7-Zip\7z.exe" l -ba -slt %~f1`, когда я попробовал заключить имя архива в кавычки `"c:\Program Files\7-Zip\7z.exe" l -ba -slt "%~f1"` (дабы можно было использовать имя с пробелами) - for поломался и перестал работать... Пришлось использовать промежуточный файл. | С пробелами всё равно проблема. Пример. Подробнее... на выходе получаем Код: 202D1287 *GTA 0818F46C *GTA | Ещё, как выяснилось, некорректный путь (несуществующий) при использовании скрипта из консоли схлопывает её (всмысле закрывает) Цитата: В cmd ничуть не сложнее: к {1> "%~n1.slt" "c:\Program Files\7-Zip\7z.exe" l -ba -slt "%~f1" } добавляем фильтрацию: {1> "%~n1.slt" "c:\Program Files\7-Zip\7z.exe" l -ba -slt "%~f1" | find /I /V "Folder = - "} | Что-то не прокатило. CRC - файл всё так же содержит строки с нулевыми суммами и директориями. upd: Смотрю обсуждение данного вопроса растянулось на ещё одну страницу (ввиду чего упомянутые проблемы выше могли потерять актуальность, поправьте меня, если я ошибаюсь). Бегло пробежался по ней и как я понял, это последний вариант скрипта на данный момент ? Цитата: Код: @echo OFF if "%~1*"=="*" exit if NOT EXIST "%~1" exit copy /y nul "%~dpn1.sfv" ||exit 1>"%~dpn1.sfv" echo ;CRC checksums for contents of "%~f1" archive 1>>"%~dpn1.sfv" echo. for /f "usebackq tokens=1,* delims== " %%A in (`cd.^&"c:\Program Files\7-Zip\7z.exe" l -ba -slt -sccUTF-8 -- "%~f1"`) do ( if /I %%~A*==Path* set "FNAME=*%%~B" if /I %%~A*==CRC* if NOT %%~B*==* if NOT %%~B*==00000000* 1>>"%~dpn1.sfv" (setlocal ENABLEDELAYEDEXPANSION&&echo %%~B !FNAME!&&endlocal) ) | | Цитата: Мне, вообще говоря, непонятно, зачем извлекать списки контрольных сумм из архива, ибо для проверки целостности архива достаточно "вшитых". Но человеку зачем-то надо, пусть пользуется. | На винте архивы. Распаковка с винта на комп - ОК. Копирую с компа на винт и ХОБА ! Файл бьётся (возможно проблемы с шиной/драйверами/ОС/etc, но такую проблему я в последнее время имею или она меня ). Можно высчитать сумму повторно и чекнуть файл на винте. А можно CRC тупо из архива вытянуь, сэкономив время. Или использовать TeraCopy/KillCopy Но там свои тараканы ... | Всего записей: 2316 | Зарегистр. 19-09-2011 | Отправлено: 14:54 20-07-2022 | Исправлено: Baltazar500, 15:14 20-07-2022 |
|