O que significa o sinal de porcentagem (% e %%) em um argumento de arquivo em lote?

11

Acho que estou perdendo alguma coisa porque não consigo encontrar o que isso significa.

Exemplo:

for /D %%A in (*) do "\7za.exe" u -t7z -m9=LZMA2 "%%A.7z" "%%A"

Essa linha deveria usar uma versão da linha de comando 7zippara compactar pastas individuais, mas estou perplexo quanto ao que %%Asignifica neste contexto.

Jim Kieger
fonte
1
Linha de comando e arquivo de banho confusos. Mudou a placa na parte superior.
Jim Kieger

Respostas:

12

O forcomando precisa de um espaço reservado para que você possa passar variáveis ​​para uso posteriormente na consulta, estamos dizendo a ele para usar o espaço reservado %A, a razão pela qual o código que você viu usa %%Aé porque dentro de um arquivo em lotes (que eu suponho que é onde você encontrou isso). %tem um significado especial, então você deve fazê-lo duas vezes %%para que seja convertido em um único %a ser passado ao forcomando

Para realmente separar o que o comando está fazendo, há duas partes no comando:

 for /D %%A in (*) do .....

O que esta parte diz é que para cada pasta na pasta atual, execute o seguinte comando substituindo %%Apelo nome da pasta em processamento no momento.

..... "\7za.exe" u -t7z -m9=LZMA2 "%%A.7z" "%%A"

O que esta parte diz é executar o comando "\7za.exe" u -t7z -m9=LZMA2 "%%A.7z" "%%A"e substituir os dois %%Apelo registro atual que estamos processando.

Scott Chamberlain
fonte
Apenas para nitpick - o / D no loop for limitará o curinga * aos diretórios, não "todos os arquivos nesta pasta e todas as subpastas" (assumindo que as extensões de comando estão ativadas).
Ernie
@ernie você está correto, eu estava olhando para a opção / R na página de ajuda, corrigi minha resposta.
Scott Chamberlain
Obrigado por isso, ele mostra o quão noobish isso parece, mas é algo bastante arcaico que eu tenho que procurar em alguns manuais online.
Jim Kieger
0

É uma variável.

Esse exemplo específico usa a opção de diretório de um loop FOR , repetindo os diretórios e atribuindo-os a %% A.

Também não é um exemplo de linha de comando, mas um exemplo de arquivo em lote. Nos arquivos em lote, você precisa usar %% A, enquanto na linha de comando, você apenas usa% A.

Ernie
fonte
0

No seu cenário, o %% A é um espaço reservado para o que o loop "for" está repetindo (o qual / D indica diretórios). Portanto, cada iteração do loop, %% A é um dos diretórios.

Você verá %% em vez de% no código do lote. Você verá% em vez de %% usado no prompt de comando.

Portanto, saiba que se você copiar um código de arquivo em lotes para um prompt de comando e executá-lo com o %% sendo usado, ocorrerá um erro e vice-versa.

Mechaflash
fonte