Перетащить пакетный файл для нескольких файлов?

Можно использовать эти Повышение. Библиотека Process . Это не официально часть Повышения все же. Я видел, что он работает приятно на других. К сожалению, boost.process прогресс, по-видимому, был остановлен. pstreams является другим (по-видимому активным) проектом. Конечно, стоящий попытки я сказал бы - но это только для совместимых операционных систем POSIX.

28
задан Chaddeus 18 September 2010 в 11:37
поделиться

1 ответ

Да, конечно, это возможно. При перетаскивании нескольких файлов в пакетный файл вы получаете список отброшенных файлов в виде списка, разделенного пробелами. Вы можете проверить это с помощью следующего простого пакета:

@echo %*
@pause

Теперь у вас есть две возможности:

  1. PngCrush уже может обрабатывать несколько имен файлов, заданных ему в командной строке. В этом случае все, что вам нужно сделать, это передать % * в PngCrush вместо просто % 1 (как вы, вероятно, делаете сейчас):

     @pngcrush% *
    

    % * содержит все аргументы командного файла, поэтому это удобный способ передать все аргументы другой программе. Однако будьте осторожны с файлами, названными как параметры PngCrush. Вундеркинды UNIX знают об этой проблеме: -)

    Однако после прочтения вашего сообщения, описывающего вашу технику, это не будет работать должным образом, так как вы записываете сжатый файл в new.png . Плохая идея, если вы обрабатываете сразу несколько файлов, так как может быть только один new.png :-). Но я только что опробовал, что PngCrush отлично справляется с несколькими файлами, поэтому, если вы не против обновления файлов на месте, поставьте

     @pngcrush -reduce -brute% *
    

    в вашем пакете выполнит работу (в соответствии с вашей исходной статьей).

  2. PngCrush не будет обрабатывать несколько файлов или , которые вы хотите записать в новый файл после сжатия. В этом случае вы придерживаетесь процедуры «по одному файлу за раз», но перебираете входные аргументы. В этом случае проще всего построить небольшой цикл и сдвигать аргументы каждый раз, когда вы его обрабатываете:

     @echo off
    если [% 1] == [] goto: eof
    : loop
    pngcrush -reduce -brute% 1 "% ~ dpn1_new% ~ x1"
    сдвиг
    если нет [% 1] == [] цикл перехода
    

    То, что мы делаем здесь, просто: сначала мы пропускаем весь пакет, если он выполняется без аргументов, затем мы определяем метку для перехода: loop . Внутри мы просто запускаем PngCrush с первым аргументом, давая сжатому файлу новое имя. Вы можете прочитать синтаксис анализа пути, который я использовал здесь в вызове справки . В основном то, что я делаю здесь, - это наименование файла точно так же, как и раньше; Я просто вставляю "_new" в конец имени файла (перед расширением). % ~ dpn1 заменяется на диск, путь и имя файла (без расширения), а % ~ x1 заменяется на расширение, включая точку.

    ETA: Eep , Я просто прочитал желаемый результат с помощью new.png, new (1) .png и т. Д. В этом случае нам не нужно никаких причудливых разборов пути, но у нас есть другие проблемы, о которых нужно позаботиться. если [% 1] == [] goto: eof установить n = 0 : loop если% n% == 0 ( pngcrush -reduce -brute% 1 new.png ) еще ( pngcrush -reduce -brute% 1 новый ^ (% n% ^). png ) сдвиг установить / a n + = 1 если нет [% 1] == [] цикл перехода

    % n% здесь наш счетчик, и мы обрабатываем случай, когда n равно 0, записывая результат в new.png вместо new ( 0) .png .

    Однако у этого подхода есть проблемы. Если уже есть файлы с именами new.png или new (x) .png , то вы, вероятно, их уничтожите. Не хорошо. Поэтому нам нужно сделать что-то другое и проверить, можем ли мы действительно использовать имена файлов:

     rem check for new.png
    если существует new.png (установить n = 1) else (установить n = 0 и перейти к циклу)
    rem проверить наличие пронумерованных новых (x) .png
    : checkloop
    если не существует new ^ (% n% ^). png goto loop
    установить / a n + = 1
    перейти к контрольной петле
    

    Остальная часть программы остается прежней, включая обычный цикл. Но теперь мы начинаем с первого неиспользуемого имени файла и избегаем перезаписи файлов, которые уже есть.

Не стесняйтесь при необходимости адаптироваться.

43
ответ дан 28 November 2019 в 03:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: