Oto wewnętrzny paker zip Total Commander:
Chcę jednak użyć mojego pakera 7zip. Kiedy wybieram 5 plików, otrzymuję 5 osobnych archiwów .zip dla każdego wybranego pliku. Jak to zrobić w 7zip?
Oto wewnętrzny paker zip Total Commander:
Chcę jednak użyć mojego pakera 7zip. Kiedy wybieram 5 plików, otrzymuję 5 osobnych archiwów .zip dla każdego wybranego pliku. Jak to zrobić w 7zip?
Odpowiedzi:
Nie jestem pewien, czy możesz zrobić to, co sugerujesz za pomocą graficznego interfejsu użytkownika, ale z pewnością możesz to zrobić z wiersza poleceń:
FOR %i IN (*.*) DO 7z.exe a "%~ni.7z" "%i"
Najpierw musisz zmienić katalog ( cd
polecenie) na F:\Downloads
katalog lub inny katalog, w którym chcesz przeprowadzić masową kompresję. Ponadto łatwo jest zastąpić plik * .exe lub dowolne rozszerzenie, które chcesz filtrować, aby po prostu skompresować te dokumenty.
I sekretny dzwonek dekodera:
%i
jest zmienną, która przechowuje nazwę pliku dla każdego kroku w pętli(*.*)
to kryteria wyboru, może to być plik * .exe lub podobny7z.exe
to wersja 7-Zip w wierszu poleceń%~ni
- powoduje to rozszerzenie zmiennej% i tylko do nazwy pliku - bez rozszerzeniaJeśli chcesz tylko dodać foldery dla danego katalogu, polecenie jest nieco bardziej złożone, ponieważ domyślnie FOR działa tylko z plikami. Musimy podać kilka dodatkowych informacji:
FOR /F "usebackq delims=?" %i IN (`DIR /B /A:D`) DO 7z.exe a "%i.7z" "%i"
Działa to z powodu kilku elementów, które wydają się magiczne:
/F
mówi FOR, aby iterować po rozszerzonej wartości w ()usebackq
mówi ZA, że przekażę polecenie i użyję danych wyjściowych do iteracjidelims=?
mówi ZA, że chcę rozdzielić tokeny na ?
- niedozwolony znak w nazwach plików i katalogach. Chcę tylko jednego tokena./B
W DIR
jest dla formatu gołej - tylko nazwa/A:D
W DIR
to na ograniczenie wyniki według atrybutu, że D jest dla katalogówJeśli chcesz umieścić to w pliku wsadowym, jedyną zmianą, którą musisz wprowadzić, jest podwójne wyjście ze zmiennej% i:
FOR %%i IN (*.*) DO 7z.exe a "%%~ni.7z" "%%i"
Podoba mi się odpowiedź Goyuixa. Jeśli jednak używasz systemu Windows 7 (lub masz zainstalowany Power Shell), a także używasz wersji 7-zip 7za.exe z linii poleceń, możesz uruchomić to polecenie:
dir | ForEach-Object { & "7za.exe" a $_.BaseName $_.Name }
Możesz także zmienić „katalog” na „katalog * .exe”, aby wybrać tylko pliki wykonywalne.
Jedną fajną rzeczą w Power Shell jest to, że pracujesz z obiektami zamiast z łańcuchami. Więc możesz być naprawdę konkretny, jeśli chcesz. Na przykład:
dir *.csv | ? { $_.Length -lt 18900 -and $_.LastWriteTime -ge [DateTime] "07/01/2011" } | ForEach-Object { & "7za.exe" a $_.BaseName $_.Name }
Dotyczy to tylko plików, które:
EDYCJA Jeśli chcesz pliki zip zamiast 7-zip, użyj zip.exe InfoZip .
7z a -tzip archive.zip *.exe
Możesz pobrać i zainstalować wtyczkę 7zip dla Total Commander ze strony http://www.ghisler.com/plugins.htm Po wykonaniu tej czynności po prawej stronie okna na zrzucie ekranu pojawi się kolejny wybór kompresji 7zip. Dzięki tej opcji możesz osiągnąć dokładnie to, o co prosisz.
Właśnie pracowałem nad tym problemem i jednym z problemów, które znalazłem, było powielenie nazwy folderu w archiwum, tj. Podczas kompresji folderu o nazwie „foo” .\foo\fighters.txt
tworzone jest archiwum zawierające zamiast jednego zawierającego fighters.txt
.
Dlatego odpowiedzią jest przejście do przetwarzanego katalogu i wyświetlenie archiwum w poprzednim (głównym) katalogu, a następnie powrót do tego katalogu w celu przetworzenia następnego folderu.
Ważne jest również, aby program 7ZIP zignorował istniejące pliki ZIP i CMD w katalogu głównym, aby zapobiec ich przedostaniu się do archiwum, stąd argumenty -x!*.zip
i -x!*.cmd
wykluczenia.
Ten skrypt zachowa również rekurencyjne struktury folderów.
@echo off
REM Ensures variables set within the batch file are local to
REM this script only and will be removed when finished.
setlocal
if exist *.zip goto zip_exist
for /d %%X in (*) do (
cls
cd /D %%X
"e:\Program Files\7-Zip\7z.exe" a -r -x!*.zip -x!*.cmd "..\%%X.zip" "*.*"
cd ..
)
goto end
:zip_exist
Echo.
Echo Note: for this script to work, compression of
Echo pre-existing zip files is not possible.
:end
pause
Powyższy kod należy skopiować do pliku wsadowego, takiego jak „katalog_kompresyjny. Cmd” i uruchomić jako administrator z katalogu zawierającego foldery, które chcesz skompresować.
Mam nadzieję że to pomoże.
Jeśli chcesz zachować strukturę folderów i zapisać każdy plik we własnej strukturze, spróbuj tego:
Zapisz to polecenie w pliku z rozszerzeniem .bat i umieść w folderze, który chcesz skompresować:
FOR /R %%i IN (*.*) DO "C:\Program Files\7-Zip\7z.exe" a "%%i.7z" "%%i" -sdel
Uwaga:
-sdel: usuwa oryginalny plik (opcjonalnie, jeśli chcesz zachować tylko skompresowany plik)