AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / computer / Perguntas / 1599429
Accepted
klepp0906
klepp0906
Asked: 2020-11-04 07:44:29 +0800 CST2020-11-04 07:44:29 +0800 CST 2020-11-04 07:44:29 +0800 CST

Arquivo de lote WinRAR para compactar o primeiro subdiretório em cada pasta em um zip

  • 772

Estou lutando para obter uma solução para verificar todas as pastas em um diretório e criar um arquivo zip dentro dessas pastas do conteúdo da primeira/única subpasta.

aqui está um exemplo de pasta/estrutura/hierarquia

I:\Unsorted\Sony - PlayStation Vita\NoNpDrm Physical\SENRAN KAGURA SV [PCSE00398] [NTSC]\PCSE00398

Eu gostaria de obter o conteúdo dentro de PCSE00398compactado em um zip (com o mesmo nome) e deixado na I:\Unsorted\Sony - PlayStation Vita\NoNpDrm Physical\SENRAN KAGURA SV [PCSE00398] [NTSC]pasta.

batch-file winrar
  • 1 1 respostas
  • 503 Views

1 respostas

  • Voted
  1. Best Answer
    Io-oI
    2020-11-05T04:40:45+08:002020-11-05T04:40:45+08:00
    @echo off 
    
    set "_flag=a -ep1 -m5 -cfg- -y -o+"
    cd /d "%~dp0" && for /d /r "I:\test\." %%i in (*
    )do 2>nul tree.com /a "%%~dpnxi"|findstr /bl \\--- >nul || (
    "%ProgramFiles%\WinRAR\Rar.exe" %_flag% "%%~i" "%%~dpni" |find/i ".rar" )

    Para chegar ao último nível de uma subpasta, basta verificar se em cada subpasta existe outra pasta ali, caso contrário, compacte esta pasta de último nível.

    Você pode usar o for /d /rloop, que passará por todas as pastas, e em cada pasta dentro do loop, usar o treecomando junto com findstr, onde você pode verificar se a pasta atual tem ou não mais subpastas.

    • FOR /R - Loop through files (recursively)
      FOR /D - Loop through several folders/directories
    • The option /D /R is undocumented, but can be a useful combination,
      while it will recurse through all subfolders the wildcard will only
      match against Folder/Directory names (not filenames)
      Note: Source linked to ss64.com

    Você pode usar o em todas as subpastas recursivamente com , e verificando cada saída com findstr "string" ( ) redirecionando para o operador e execute a ação ( ) se não encontrar esta string na saída do comando :tree "current_looping_folder" /afor /d /r"\---"||Rar\---tree\---Last Folder

    Folder PATH listing
    Volume serial number is A0AD-DC56
    F:\SUPER_USER\Q1599429
    \---Last Folder

    A saída acima é da pasta onde estou, F:\SUPERUSER\Q1599429e aqui temos a Last Foldersubpasta, mas se estou na F:\SUPER_USER\Q1599429\Last Foldersubpasta, recebo a saída abaixo:

    Folder PATH listing
    Volume serial number is A0AD-DC56
    F:\SUPER_USER\Q1599429\Last Folder
    No subfolders exist

    Se findstrnão encontrar a string "\---", não tenho subpasta na pasta atual, esta é a última pasta:

    F:\SUPER_USER\Q1599429\Last Folder
    

    Neste caso, se não houver subpasta, o comando command não terá sucesso, fazendo com que o operador execute o comando exatamente na sua última pasta do nível de pasta real...tree "Actual_Loop_Folder" /a | findstr "\---"||Rar.exe

    • Obs.: 1 O adicional \é necessário para escapar do caractere \emfindstr
     ... tree.com /a "%%~dpnxi"|findstr /bl \\--- ... 
    • Obs.: 2 Isso tentará ilustrar como o ||operador trabalha mecanicamente:
                             command1 || command2
                     execute command1 || only execute command2 (if) command1 fails
              if tree folder /a fails || there is no subfolder in it
          there is no subfolder in it || this is the the last subfolder
           this is the last subfolder || run rar flags in the \Last Folder
    tree /a "%~fi"|findstr "\---">nul || Rar "I:\Unsorted\...\PCSE00398"
    • Obs.: 3 Caso precise rodar com , basta remover/ WinRar.exesubstituir Rar.exe/editar:
    "%ProgramFiles%\WinRAR\Rar.exe" %_flag% "%%~i" "%%~dpni" |find/i ".rar"
    
    "%ProgramFiles%\WinRAR\WinRar.exe" %_flag% "%%~i" "%%~dpni" 
    • Obs.: 4 Você pode editar para usar seus flags/switches personalizados para o seu Rar/WinRarcomando:
    <Commands>
            a    ==  Add files to archive 
    
    <Switches>
    
          cfg-   ==  Disable read configuration 
          ep1    ==  Exclude base directory from names 
      m<0..5>    ==  Set compression level (0-store...3-default...5-maximal) 
       o[+|-]    ==  Set the overwrite mode 
            y    ==  Assume Yes on all queries 
    -----------------------------------------------------------------------
    set "_flag=a -ep1 -m5 -cfg- -y -o+"

    • Algumas leituras adicionais:

    [√] Para Loop

    [√] Para /D Loop

    [√] Para Loop /R

    [√] WinRar.exe | Rar.exe /?

    [√] Operador de CMD/Bat /dostips.com

    [√] Execução Condicional || && ...

    • 2

relate perguntas

  • preciso de ajuda para descobrir como fazer meu arquivo de lote parar de quebrar

  • Net Stop, como parar um segundo serviço enquanto o primeiro está ¨Parando...¨

  • Gerador de senha em lote

  • O Windows 2016 não executa o arquivo .bat

  • Como fazer um script em lote para fazer backup de um arquivo específico com uma pasta de destino exclusiva (windows) [fechado]

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como posso reduzir o consumo do processo `vmmem`?

    • 11 respostas
  • Marko Smith

    Baixar vídeo do Microsoft Stream

    • 4 respostas
  • Marko Smith

    O Google Chrome DevTools falhou ao analisar o SourceMap: chrome-extension

    • 6 respostas
  • Marko Smith

    O visualizador de fotos do Windows não pode ser executado porque não há memória suficiente?

    • 5 respostas
  • Marko Smith

    Como faço para ativar o WindowsXP agora que o suporte acabou?

    • 6 respostas
  • Marko Smith

    Área de trabalho remota congelando intermitentemente

    • 7 respostas
  • Marko Smith

    O que significa ter uma máscara de sub-rede /32?

    • 6 respostas
  • Marko Smith

    Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows?

    • 1 respostas
  • Marko Smith

    O VirtualBox falha ao iniciar com VERR_NEM_VM_CREATE_FAILED

    • 8 respostas
  • Marko Smith

    Os aplicativos não aparecem nas configurações de privacidade da câmera e do microfone no MacBook

    • 5 respostas
  • Martin Hope
    CiaranWelsh Como posso reduzir o consumo do processo `vmmem`? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Pesquisa do Windows 10 não está carregando, mostrando janela em branco 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    v15 Por que uma conexão de Internet gigabit/s via cabo (coaxial) não oferece velocidades simétricas como fibra? 2020-01-25 08:53:31 +0800 CST
  • Martin Hope
    fixer1234 O "HTTPS Everywhere" ainda é relevante? 2019-10-27 18:06:25 +0800 CST
  • Martin Hope
    andre_ss6 Área de trabalho remota congelando intermitentemente 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney Por que colocar um ponto após o URL remove as informações de login? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca Todos os meus complementos do Firefox foram desativados repentinamente, como posso reativá-los? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK É possível criar um código QR usando texto? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 Altere o nome da ramificação padrão do git init 2019-04-01 06:16:56 +0800 CST

Hot tag

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve