как перетащить несколько файлов? - PullRequest
0 голосов
/ 11 июня 2019

Я делаю пакетный декодер и кодировщик 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

пакет не будет кодировать файлы сразу.

1 Ответ

2 голосов
/ 11 июня 2019

%random% будет постоянным на протяжении всех итераций цикла.Вам нужно включить отложенное расширение и использовать вместо него !random!.Но я бы даже не стал этого делать, потому что !random! может давать повторяющиеся значения.Вряд ли, но возможно.Если бы это было невозможно для дубликатов, то это не было бы случайно.

Я бы просто добавил .b64 к исходному имени.

Вам не нужен FINDSTR для фильтрации заголовка/ сноска.Есть опций для управления форматом вывода CERTUTIL .

Я предполагаю, что вы хотите, чтобы закодированные выходные файлы находились в том же каталоге, что и источник.

Поскольку аргументы будутбыть набором имен файлов (путей), вы можете просто выполнить итерацию %* с помощью FOR.

@echo off
for %%F in (%*) do certutil -encodehex -f %%F %%F.b64 1

Еще один приятный результат приведенного выше - вы можете вызвать сценарий в командной строке с помощью символов подстановки, иЦикл FOR будет повторять все соответствующие файлы.

Но при перетаскивании существует одна потенциальная проблема - Windows правильно заключает файл в кавычки, если в нем есть пробелы.Но он не заключает файл в кавычки, если имя имеет & без пробелов.

Так что если вы перетаскиваете любые имена файлов с &, которые не содержат пробелов, тогда простое решениевыше не получится.

Код гораздо сложнее, если вы хотите обрабатывать перетаскивание с & в имени .

...