7

Я (пытаюсь) разработать программу для работы с 7-zip консольной программой (7z.exe) через ShellExecute () и передать ей сгенерированный компьютером список файлов.

Теперь то, что я хочу сделать, это:

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

include these :
c:\path\path2\path
c:\path\path2\path__\
.... more files

exclude these :
c:\path\path2\path\data\files\foo\bar\fish.dat
c:\path\path2\path__\data\slug.mp3
.... more files

поэтому я делаю командную строку так:

7z a -t7z -i!"...file to include" -x!"file to exclude" ... etc etc

Я просто повторяю по памяти, поэтому я знаю, что командная строка может быть не точной

Но то, что я ввожу, не работает. Я просто получаю все в пути и пути. То, что я хочу, это архив, который выглядит так внутри:

.\
path\
     data\
          files\
                foo\
                    bar\
                        <everything in path\data\files\foo\bar except for foo.dat>
path__\
       data\
            <everything in path__\data\ except for slug.mp3>

Могу ли я получить некоторую помощь для получения этого результата? Спасибо

1 ответ1

7

Не зная вашей точной 7z -команды, она просто угадывает, но здесь она идет:

7z a -t7z -ir@"files_to_include.txt" -xr@"files_to_exclude.txt" ....

Обратите внимание на r после -i и -x для рекурсии. Вы также, вероятно, использовали @ перед именем файла вместо ! , (или, по крайней мере, вы должны. ! используется для указания подстановочного знака в командной строке :)

Тогда для вашего files_to_exclude.txt . Я считаю, что вы должны использовать относительные пути здесь. Так что не указывайте c:\.... перед вашими путями. Если ваши общие пути в include - это c:\path\path2 вам нужно удалить его из исключения. Причина этого заключается в том, что в то время как 7z сжимает ваши файлы, он уже покончил с c:\path\path2 (потому что хранится не весь путь, а только относительная часть). Так что ваши исключения больше не совпадают. Вы можете видеть это, потому что при открытии .zip c:\path\path2 нет в .zip. (Так что сопоставление не работает)

Итак, ваш files_to_exclude.txt должен выглядеть так:

path\data\files\foo\bar\fish.dat
path__\data\slug.mp3
.... more files

Так что, если после добавления r после -i и -x и изменения нового files_to_exclude.txt вас все еще есть проблемы, нам нужно увидеть вашу фактическую команду.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .