Utilizzo di un file batch per comprimere i file come singoli file zip


10

Quindi sto cercando di usare 7zip in un file batch per prendere i file in una cartella e comprimerli come singoli file. Quindi il primo file ottiene il proprio archivio zip, il successivo e così via. Ho cercato su Internet e ho provato un sacco di codici diversi. Finora sono riuscito solo a comprimerli come un singolo file zip e l'output sul mio desktop.

Purtroppo ho perso il codice che lo ha fatto, e ora sono bloccato con questo che sembra non fare nulla.

@echo on
cd "C:\Users\MVD21\Desktop\test"
FOR %%i IN (C:\Users\MVD21\Desktop\test) DO 7z.exe a "%~ni.7z" "%i"
pause

Voglio che ogni file abbia il proprio archivio zip e che l'archivio zip condivida il nome del file, meno l'estensione ovviamente.

Qualsiasi aiuto è molto apprezzato.


Anche se c'è un modo più semplice per farlo utilizzando la funzione zip integrata su Windows 10, andrebbe bene anche.
Mike Van Dunk,

Risposte:


4

Voglio che ogni file abbia il proprio archivio zip e che l'archivio zip condivida il nome del file, meno l'estensione ovviamente.

Script batch

(Imposta i percorsi delle cartelle esplicite complete di origine e destinazione in alto, quindi esegui secondo necessità. La fonte è dove esistono i file che vuoi comprimere e la destinazione è dove vuoi che siano compressi.)

@ECHO ON

SET SourceDir=C:\folder\source
SET DestDir=C:\folder\destination

CD /D "C:\Program Files\7-Zip"
FOR /F "TOKENS=*" %%F IN ('DIR /B /A-D "%SourceDir%"') DO (
    7z.exe a "%DestDir%\%%~NF.zip" "%SourceDir%\%%~NXF"
)
EXIT

Riga di comando

FOR /F "TOKENS=*" %F IN ('DIR /B /A-D "C:\Folder\Source"') DO 7z.exe a "C:\Folder\Dest\%~NF.zip" "C:\Folder\Source\%~NXF"

Ulteriori risorse


4

Lo script originale procede come segue, riga per riga:

@echo on

Indica al prompt dei comandi di stampare indietro ogni comando nel file batch prima di eseguirli. Questo è solo per poter "vedere" cosa sta realmente facendo prima di farlo.

cd "C:\Users\MVD21\Desktop\test"

C sospende D irectory in quello che spero sia il percorso in cui vuoi comprimere tutti i file.

FOR %%i IN (C:\Users\MVD21\Desktop\test) DO 7z.exe a "%~ni.7z" "%i"

Il parametro per il INqui è (C:\Users\MVD21\Desktop\test). Questo farà sì che il loop "body" (l'azione dietro la parola chiave DO) venga eseguito esattamente una volta , con il %iparametro assegnato il valore C:\Users\MVD21\Desktop\test. Non sorprende che questo non faccia quello che vuoi! Sembra che questo comprimerebbe l'intera directory in un singolo file .7z.

Se non fa nulla , è probabilmente perché non riesce a trovare il percorso di 7z.exe. Se quel file non si trova nella directory corrente (quella testdirectory menzionata sopra), allora dovrà trovarsi nella PATH(nella %PATH%variabile d'ambiente; provare echo %PATH%in una shell per vedere a che cosa è attualmente impostato). Altrimenti devi copiare 7z.exenella directory corrente o specificare un percorso assoluto dove si trova (come, ad esempio, "C:\Program Files\7-zip\7z.exe" ...).

pause

Al termine dello script, questa parola chiave dice alla shell di attendere che tu prema invio o chiudi il prompt dei comandi invece di uscire immediatamente.


Quando stai costruendo uno script batch (o, in effetti, qualsiasi altra cosa che abbia a che fare con il codice), dovresti smettere di trattare l'intero script come un copia-incolla monolitico che non intendi (tentare di) e invece scomporre il tuo problema in sottoparti che è possibile individuare individualmente, quindi collegarli insieme. Ciò ti consentirà di risolvere i problemi in modo indipendente e creare soluzioni invece di chiedere a qualcun altro di fare tutto il tuo lavoro per te. Lo consiglio vivamente.

Nel tuo caso, hai i seguenti sottocomponenti del problema:

  1. Scorrere su (loop) ogni file contenuto in una determinata directory.
  2. Per ogni dato file, inseriscilo in un file .7z invocando l' 7zutilità.

Le possibilità che qualcuno abbia già una risposta là fuori che risolva il tuo bisogno specifico è inferiore alla possibilità di essere in grado di trovare i pezzi più generali individualmente.

Questa domanda, "Come fare qualcosa per ogni file in una directory in uno script batch" risolve metà del tuo problema.

Il filo conduttore della risposta è che hai appena iniziato con questa parte da quella risposta StackOverflow:

for /f "usebackq delims=|" %%f in ('dir /b "c:\program files"') do echo %%f

e cambia la parte in cui sta facendo qualcosa (il echo %%f) per fare quello che vuoi fare . So che devi cambiare quella parte, perché ho analizzato il testo dello script e capito cosa significano ogni carattere e parametro, quindi posso ragionare su dove voglio inserire il mio codice.

Ecco qualche "codice aereo" (non testato!):

for /f "usebackq delims=|" %%f in ('dir /b "C:\Users\MVD21\Desktop\test"') do 7z.exe a "%~ni.7z" "%i"

Le dichiarazioni @echo one pausesopra sono una buona pratica, quindi puoi lasciarle. E probabilmente vorrai conservare anche quella cddichiarazione, se i tuoi file si trovano in quel percorso.

Quindi cosa ci lascia?

@echo on
cd "C:\Users\MVD21\Desktop\test"
for /f "usebackq delims=|" %%f in ('dir /b "C:\Users\MVD21\Desktop\test"') do 7z.exe a "%~nf.7z" "%f"
pause

Se rispondi con "Non funziona!", NON ti aiuterò. Se provi questo e non funziona, DEVI dirmi nei commenti le seguenti informazioni:

  • Quale messaggio di errore esatto viene visualizzato nel prompt dei comandi quando si eseguono questi comandi o li si inserisce in un file batch e li si esegue? Non abbreviare; copia e incolla direttamente l'output (mettilo su http://pastebin.com se è molto).
  • Cosa pensi che il messaggio di errore ti stia dicendo che il problema è?
  • Dove si trova l'installazione a 7 zip (il percorso del file)?
  • Il percorso del file dell'installazione di 7-zip è incluso nei contenuti della PATHvariabile d'ambiente? (controlla questo, come detto sopra, con echo %PATH%in un cmdprompt.)

Non penso che funzioni perché ho 7zip installato su un'altra unità? Sembra funzionare se faccio cd "Location of 7zip" come nella risposta originale. Ovviamente funziona solo "a volte". Stava funzionando fino a quando non ho inserito un'altra dichiarazione eco e ora non lo è. E sì, sto cercando di capire di più sui file batch. Ho cercato di trovare un glossario di comandi batch o cosa non studiare, quindi lo capisco davvero. Fidati di me Preferirei capire E farlo funzionare piuttosto che farlo funzionare.
Mike Van Dunk,

Ho provato la tua soluzione e non posso dirti quale sia l'output perché il file batch non viene eseguito affatto. Si apre brevemente con la finestra cmd che lampeggia e poi si chiude di nuovo. Sì, ho la pausa lì dentro. Ho 7zip installato sia sul mio disco locale che su un disco interno secondario, ma non sembra far parte dell'ambiente di percorso
Mike Van Dunk

Mi piacerebbe davvero capire, ma cercare su Google non aiuta molto. Ad esempio, non ho idea di cosa sia quel comando o parametro "'dir / b" o cosa stia facendo. So che dir è ovviamente una directory ma non so cosa sia / b. Quello che vorrei è che qualcuno spiegasse cosa stanno facendo i parametri in modo che io possa capire meglio. O se qualcuno ha un link a un sito in cui va oltre questo genere di cose che sarebbe utile anche. Ho cercato su Google 'dir / b in un file batch e non sono riuscito a trovare nulla. Penso che / b abbia qualcosa a che fare con i nomi dei file ma non sono sicuro.
Mike Van Dunk,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.