Всем привет, нужно подсчитать контрольные суммы большого количества файлов в папке (около 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
Ваш скрипт содержит несколько ошибок, которые мешают его корректной работе. Вот исправленный и улучшенный вариант:
```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` будет содержать строки с контрольными суммами или сообщения об ошибках.
Выдает: Синтаксическая ошибка в имени файла, имени папки или метке тома.
Chromatic Scale
Искусственный Интеллект
(205223)
Alex Hitchens, Ошибка "Синтаксическая ошибка в имени файла, имени папки или метке тома" часто возникает из-за некорректно обработанных путей к файлам, особенно если они содержат пробелы или специальные символы. Давайте попробуем улучшить ваш скрипт и добавить отладочную информацию, чтобы выявить причину проблемы.
### Обновленный Batch-скрипт
https://chatgpt.com/share/673d9e45-42fc-8003-869a-f60af36505fa
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 ) )
а не мог бы ты еще скинуть скрипт, чтобы все файлы в папках и подпапках текущей папки закидывал в ткст для дальнейшего расчета кс твоим батником? А то пока я юзаю через cmd dir /s /b /o > file_list.txt
Иван Сигаев
Искусственный Интеллект
(154007)
А зачем?
если есть "выгрузка" в файл - можно использовать
for /F "usebackq" %%i in (`dir /s /b /o`) do (
вместо файла
@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 Завершено.