Então, eu estou tentando usar 7zip em um arquivo em lotes para pegar os arquivos em uma pasta e compactá-los como arquivos individuais. Portanto, o primeiro arquivo obtém seu próprio arquivo zip, e o próximo e assim por diante. Estive procurando na internet e tentei vários códigos diferentes. Até agora, só consegui compactá-los como um único arquivo zip e gerá-los na minha área de trabalho.
Infelizmente, perdi o código que fez isso e agora estou preso a isso que parece não fazer nada.
@echo on
cd "C:\Users\MVD21\Desktop\test"
FOR %%i IN (C:\Users\MVD21\Desktop\test) DO 7z.exe a "%~ni.7z" "%i"
pause
Quero que cada arquivo tenha seu próprio arquivo zip e, para que ele compartilhe o nome do arquivo, menos a extensão, é claro.
Qualquer ajuda é muito apreciada.
Respostas:
Script de lote
(Defina os caminhos completos das pastas explícitas de origem e destino no topo e execute-os conforme necessário. A origem é onde estão os arquivos que você deseja compactar e o destino é onde você deseja que eles sejam compactados.)
Linha de comando
Recursos adicionais
fonte
Seu script original faz o seguinte, linha por linha:
@echo on
Informa ao prompt de comando para imprimir de volta cada comando no arquivo em lotes antes de executá-los. Isso é apenas para que você possa "ver" o que realmente está fazendo antes de fazê-lo.
cd "C:\Users\MVD21\Desktop\test"
C Hanges D irectory no que eu espero é o caminho onde você deseja zip de todos os arquivos.
FOR %%i IN (C:\Users\MVD21\Desktop\test) DO 7z.exe a "%~ni.7z" "%i"
O parâmetro para o
IN
aqui é(C:\Users\MVD21\Desktop\test)
. Isso fará com que o loop "body" (a ação por trás da palavra-chaveDO
) seja executado exatamente uma vez , com o%i
parâmetro atribuído ao valorC:\Users\MVD21\Desktop\test
. Não é surpresa que isso não faça o que você quer! Parece que isso compactaria o diretório inteiro em um único arquivo .7z.Se não fizer nada , provavelmente é porque não consegue encontrar o caminho
7z.exe
. Se esse arquivo não estiver no diretório atual (otest
diretório mencionado acima), ele deverá estar naPATH
(na%PATH%
variável de ambiente; tenteecho %PATH%
em um shell para ver o que está definido atualmente). Caso contrário, você deverá copiar7z.exe
para o diretório atual ou especificar um caminho absoluto para onde ele está localizado (como, por exemplo"C:\Program Files\7-zip\7z.exe" ...
).pause
Quando o script é concluído, essa palavra-chave diz ao shell para aguardar você pressionar enter ou fechar o prompt de comando em vez de sair imediatamente.
Ao criar um script em lote (ou, na verdade, qualquer outra coisa que lida com código), você deve parar de tratar o script inteiro como uma cópia-colagem monolítica que você não entende (tenta entender) e, em vez disso, divide sua problema em sub-partes que você pode descobrir individualmente e depois conectá-las. Isso permitirá que você resolva problemas de forma independente e crie soluções em vez de solicitar que outra pessoa faça todo o seu trabalho por você. Eu recomendo.
No seu caso, você tem os seguintes subcomponentes do seu problema:
7z
utilitário.As chances de alguém já ter uma resposta lá fora que resolve sua necessidade específica são menores do que a chance de encontrar as partes mais gerais individualmente.
Esta pergunta, 'Como fazer algo com cada arquivo em um diretório em um script em lote' resolve metade do seu problema.
O ponto principal da resposta é que você apenas começa com esta parte da resposta StackOverflow:
for /f "usebackq delims=|" %%f in ('dir /b "c:\program files"') do echo %%f
e mude a parte em que está fazendo algo (o
echo %%f
) para fazer o que você quer fazer . Eu sei que você precisa alterar essa parte, porque analisei o texto do script e entendi o que cada caractere e parâmetro significam, para que eu possa raciocinar sobre onde quero inserir meu próprio código.Aqui está um "código de ar" (não testado!):
for /f "usebackq delims=|" %%f in ('dir /b "C:\Users\MVD21\Desktop\test"') do 7z.exe a "%~ni.7z" "%i"
As instruções
@echo on
epause
acima são boas práticas, portanto você pode deixá-las dentro. E provavelmente você também deseja manter essacd
declaração, se seus arquivos estiverem localizados nesse caminho.Então, o que isso nos deixa?
Se você responder com "Não funciona!", NÃO O ajudarei. Se você tentar isso e não funcionar, você DEVE me dizer nos comentários as seguintes informações:
PATH
variável de ambiente? (verifique isso, como mencionado acima, comecho %PATH%
umcmd
prompt.)fonte