Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите с скриптом для подсчета контрольных сумм

Alex Hitchens Знаток (349), открыт 1 день назад
Всем привет, нужно подсчитать контрольные суммы большого количества файлов в папке (около 100-200), делать это вручную слишком долго, нашел в инете пример скрипта, но он не отрабатывает, выдает синтаксическую ошибку, исходный файл просто перезаписывается пустым. Можете отредактировать или предложить свой вариант? КС должны считаться по Гост 2012 256

@echo off
setlocal enabledelayedexpansion

:: Создаем временный файл для записи результатов
set output_file=temp_result.txt
echo. > %output_file%

:: Открываем файл file1.txt и обрабатываем его построчно
for /f "delims=" %%i in (file1.txt) do (
set "line=%%i"
:: Выполняем команду с каждой строкой
for /f "tokens=*" %%a in ('"C:\Users\user\Desktop\111\cpverify.exe" -mk -alg GR3411_2012_256 "!line!"') do (
echo !line! %%a >> %output_file%
)
)

:: Перезаписываем исходный файл результатами
move /y %output_file% file1.txt

echo Завершено.
3 ответа
Chromatic Scale Искусственный Интеллект (205223) 1 день назад
Ваш скрипт содержит несколько ошибок, которые мешают его корректной работе. Вот исправленный и улучшенный вариант:

```bat
@echo off
setlocal enabledelayedexpansion

:: Задаем временный файл для записи результатов
set output_file=temp_result.txt
echo. > %output_file%

:: Убедимся, что файл file1.txt существует
if not exist file1.txt (
echo Файл file1.txt не найден. Проверьте путь и повторите попытку.
exit /b
)

:: Обрабатываем файл построчно
for /f "usebackq delims=" %%i in ("file1.txt") do (
set "line=%%i"
:: Проверяем, существует ли файл по пути, указанному в строке
if exist "!line!" (
for /f "tokens=*" %%a in ('"C:\Users\user\Desktop\111\cpverify.exe" -mk -alg GR3411_2012_256 "!line!"') do (
echo !line! %%a >> %output_file%
)
) else (
echo !line! [Файл не найден] >> %output_file%
)
)

:: Перезаписываем исходный файл результатами
move /y %output_file% file1.txt >nul

echo Завершено.
pause
```

### Объяснение изменений:
1. **Проверка существования `file1.txt`:** Добавил проверку, чтобы предотвратить ошибки, если файл отсутствует.
2. **Проверка пути файла:** Теперь проверяется, существует ли файл, на который ссылается строка в `file1.txt`. Если файл отсутствует, добавляется сообщение `[Файл не найден]`.
3. **Правильная обработка строк:** Добавил `usebackq`, чтобы избежать проблем с именами файлов, содержащими пробелы.
4. **Тихая перезапись:** Команда `move` теперь не отображает стандартный вывод (через `>nul`).
5. **Формат вывода:** Если строка указывает на файл, а контрольная сумма вычислена, строка будет корректно записана в выходной файл.

### Как использовать:
1. Убедитесь, что `file1.txt` содержит абсолютные пути к файлам для подсчета контрольной суммы.
2. Убедитесь, что `cpverify.exe` находится в указанной директории и поддерживает алгоритм `GR3411_2012_256`.
3. Запустите скрипт. После выполнения `file1.txt` будет содержать строки с контрольными суммами или сообщения об ошибках.

Если потребуется дальнейшая помощь, дайте знать!
Alex HitchensЗнаток (349) 1 день назад
Выдает: Синтаксическая ошибка в имени файла, имени папки или метке тома.
Chromatic Scale Искусственный Интеллект (205223) Alex Hitchens, Ошибка "Синтаксическая ошибка в имени файла, имени папки или метке тома" часто возникает из-за некорректно обработанных путей к файлам, особенно если они содержат пробелы или специальные символы. Давайте попробуем улучшить ваш скрипт и добавить отладочную информацию, чтобы выявить причину проблемы. ### Обновленный Batch-скрипт https://chatgpt.com/share/673d9e45-42fc-8003-869a-f60af36505fa
Иван Сигаев Искусственный Интеллект (154007) 1 день назад
Попробуй
 for /F "tokens=*" %%i in (file1.txt) do (   
for /f "usebackq" %%a in (`cpverify.exe -mk -alg GR3411_2012_256 "%%i"`) do (
echo %%i %%a >> temp_result.txt
)
)


for /F "tokens=*" %%i in (file1.txt) do (
for /f "usebackq" %%a in (`cpverify.exe -mk -alg GR3411_2012_256 "%%i"`) do (
echo %%i %%a >> temp_result.txt
)
)
Alex HitchensЗнаток (349) 1 день назад
спасибо, пушка) все работает
Alex HitchensЗнаток (349) 1 день назад
а не мог бы ты еще скинуть скрипт, чтобы все файлы в папках и подпапках текущей папки закидывал в ткст для дальнейшего расчета кс твоим батником? А то пока я юзаю через cmd dir /s /b /o > file_list.txt
Иван Сигаев Искусственный Интеллект (154007) А зачем? если есть "выгрузка" в файл - можно использовать for /F "usebackq" %%i in (`dir /s /b /o`) do ( вместо файла
Алекс Куха Высший разум (461578) 1 день назад
Скрин с ошибкой покажи, если хочешь исправить. Накрутил, конечно, знатно. Так-то выше однострок камрад выложил
Похожие вопросы