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 IN
qui è (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 %i
parametro 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 test
directory 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.exe
nella 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:
- Scorrere su (loop) ogni file contenuto in una determinata directory.
- Per ogni dato file, inseriscilo in un file .7z invocando l'
7z
utilità.
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 on
e pause
sopra sono una buona pratica, quindi puoi lasciarle. E probabilmente vorrai conservare anche quella cd
dichiarazione, 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
PATH
variabile d'ambiente? (controlla questo, come detto sopra, con echo %PATH%
in un cmd
prompt.)