7-zip - Verwendung der Befehlszeile zum Ein- und Ausschließen einer großen Liste von Dateien

8

Ich versuche ein Programm zu entwickeln, um das 7-zip-Konsolenprogramm (7z.exe) über ShellExecute () zu betreiben und ihm eine computergenerierte Liste von Dateien zu übergeben.

Was ich jetzt tun möchte, ist Folgendes:

Ich möchte ihm eine Befehlszeile übergeben, in der er aufgefordert wird, Dateien einzuschließen und auszuschließen: dh

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

Also mache ich eine Kommandozeile wie folgt:

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

Ich wiederhole nur aus dem Speicher, damit ich weiß, dass die Befehlszeile möglicherweise nicht korrekt ist

Aber was ich eingebe, funktioniert nicht. Ich bekomme einfach alles in Pfad und Pfad__. Was ich will, ist ein Archiv, das innen so aussieht:

.\
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>

Könnte ich Hilfe haben, um dieses Ergebnis zu erzielen? Vielen Dank

zsteve
quelle
Im ersten Teil Ihrer Frage möchten Sie fish.dat und slug.mp3 ausschließen, und im letzten Teil möchten Sie ein Archiv mit nur diesen Dateien. Welches ist es? (Wenn es ein Tippfehler ist, korrigieren Sie bitte die Frage, indem Sie sie bearbeiten .
Rik

Antworten:

9

Ohne Ihren genauen 7zBefehl zu kennen, wird nur geraten, aber hier ist es:

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

Beachten Sie das rnach -iund -xfür rekursiv. Sie haben wahrscheinlich auch @vor dem Dateinamen anstelle des verwendet !. (oder zumindest sollten Sie. !wird verwendet, um Platzhalter in der Befehlszeile anzugeben :)

Dann für Ihren files_to_exclude.txtInhalt. Ich glaube, Sie sollten hier relative Pfade verwenden. Geben Sie also nicht die c:\....vor Ihren Pfaden an. Wenn Ihre gemeinsamen Pfade im Include sind c:\path\path2, müssen Sie dies aus dem Ausschluss löschen . Der Grund dafür ist, dass beim 7zKomprimieren Ihrer Dateien der c:\path\path2-part bereits entfernt wurde (da nicht der gesamte Pfad gespeichert wird, sondern nur der relative Teil). Ihre Ausschlüsse stimmen also nicht mehr überein. Sie können dies sehen, weil sich beim Öffnen die .zip c:\path\path2nicht in der .zip befindet. (Also Matching funktioniert nicht)

Du files_to_exclude.txtsolltest also so aussehen:

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

Wenn Sie also nach dem Hinzufügen des rNachher -iund dem -xÄndern des Neuen files_to_exclude.txtimmer noch Probleme haben, müssen wir Ihren tatsächlichen Befehl sehen.

Rik
quelle