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:
- Scorrere su (loop) ogni file contenuto in una determinata directory.
- 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.)