Я делаю пакетный декодер и кодировщик base64, но я хочу иметь возможность перетаскивать несколько файлов, а не только один за раз.
я пробовал это
if "%~1" == "" goto :EOF
for %%I in ("%~1\*.tex") do certutil -encode %* tmp.b64 && findstr /v /c:- tmp.b64 > %random%.b64
вот рабочий код для перетаскивания всего одного файла
certutil -encode %~1 tmp.b64 && findstr /v /c:- tmp.b64 > %random%.b64
пакет не будет кодировать файлы сразу.
Взгляните также на это: Batch-Script — перебирать аргументы
%random%
будет постоянным на всех итерациях цикла. Вам нужно будет включить отложенное расширение и использовать вместо этого !random!
. Но я бы даже этого не делал, потому что !random!
может давать повторяющиеся значения. Маловероятно, но возможно. Если бы не было дубликатов, то это не было бы случайным.
Я бы просто добавил .b64
к исходному имени.
Вам не нужен FINDSTR для фильтрации верхнего/нижнего колонтитула. Есть параметры для управления форматом вывода CERTUTIL.
Я предполагаю, что вы хотите, чтобы закодированные выходные файлы находились в том же каталоге, что и источник.
Поскольку аргументы будут представлять собой ряд имен файлов (путей), вы можете просто повторить %*
с помощью FOR.
@echo off
for %%F in (%*) do certutil -encodehex -f %%F %%F.b64 1
Еще один приятный результат вышеизложенного — вы можете вызывать скрипт в командной строке с подстановочными знаками, и цикл FOR будет перебирать все совпадающие файлы.
Но есть одна потенциальная проблема при перетаскивании — Windows правильно заключает файл в кавычки, если в нем есть пробелы. Но он не заключает файл в кавычки, если в имени есть &
без пробелов.
Поэтому, если вы перетащите любые имена файлов с &
, которые не содержат пробела, то простое решение выше не удастся.
Код намного сложнее, если вы хотите обрабатывать перетаскивание с помощью &
в названии.
есть ли способ использовать большие файлы, такие как ГБ или 5 МБ, вместо небольшого файла, такого как текстовый файл? У меня есть файлы размером 5 МБ или 1 ГБ, которые я хочу закодировать, и можем ли мы обойти ограничение в 32 бита? ошибка: Input Length = 147058392 EncodeToFile вернул арифметический результат, превышающий 32 бита. 0x80070216 (WIN32: 534 ERROR_ARITHMETIC_OVERFLOW) CertUtil: команда -encodehex FAILED: 0x80070216 (WIN32: 534 ERROR_ARITHMETIC_OVERFLOW) CertUtil: арифметический результат превышает 32 бита.
также каков предел размера?
@unknownunknown - ограничения размера CERTUTIL не задокументированы. Другие протестировали и определили, что предел исходного кода base64 составляет 74 472 684 байта. Предел шестнадцатеричного кодирования меньше и составляет 21 510 272 байта. Powershell может кодировать/декодировать base64 и hex, но я понятия не имею об ограничениях размера. Если это не сработает для вас, я думаю, вам нужно будет найти стороннюю утилиту.
Я уменьшил его до 29 файлов вместо одного, чтобы он работал, и спасибо за вашу работу.
используйте сдвиг и идти к