Acho %~dp0
muito útil e o uso muito para tornar meus arquivos em lote mais portáteis.
Mas o rótulo em si parece muito enigmático para mim ... O que está ~
fazendo? Faz dp
movimentação média e caminho? Refere- 0
se ao %0
caminho para o arquivo em lotes que inclui o nome do arquivo?
Ou é apenas um rótulo estranho?
Também gostaria de saber se é um recurso documentado ou se é algo que pode ser preterido.
batch-file
Sebastián Grignoli
fonte
fonte
%~dp0
. Normalmente, acho que os principais hits referem-se ao conteúdo do SO.Respostas:
Chamando
na linha de comando, fornece ajuda sobre essa sintaxe (que também pode ser usada fora do FOR, este é apenas o lugar onde a ajuda pode ser encontrada).
Existem letras diferentes que você pode usar como
f
"nome completo do caminho",d
letra da unidade,p
caminho e elas podem ser combinadas.%~
é o começo de cada uma dessas seqüências e um númeroI
indica que ele funciona no parâmetro%I
(onde%0
está o nome completo do arquivo em lotes, exatamente como você imaginou).fonte
I
. Eu tenho que usar em0
vez deI
. Não sei se perdi algo ou o que quer, mas apenas avise as pessoas.I
é um espaço reservado para o índice variável.0
= O arquivo de chamada,1
= argumento nº 1,2
= argumento # 2, etc ...(Primeiro, eu gostaria de recomendar este site de referência útil para o lote: http://ss64.com/nt/ )
Depois, apenas mais uma explicação útil: http://htipe.wordpress.com/2008/10/09/the-dp0-variable/
E uma referência mais clara daqui :
%CmdCmdLine%
retornará toda a linha de comando conforme passada para o CMD.EXE%*
retornará o restante da linha de comando iniciando no primeiro argumento da linha de comando (no Windows NT 4,% * também inclui todos os espaços iniciais)%~dn
retornará a letra da unidade de% n (n pode variar de 0 a 9) se% n for um caminho ou nome de arquivo válido (sem UNC)%~pn
retornará o diretório de% n se% n for um caminho ou nome de arquivo válido (sem UNC)%~nn
retornará o nome do arquivo apenas% n se% n for um nome de arquivo válido%~xn
retornará a extensão do arquivo apenas% n se% n for um nome de arquivo válido%~fn
retornará o caminho completo de% n se% n for um nome ou diretório de arquivo válidoADICIONAR 1
Acabei de encontrar uma boa referência para o misterioso
~
operador de til.A
%~
string é chamada de operador percentual de til . Você pode encontrá-lo em situações como:%~0
.A
:~
string é chamada de operador de dois pontos . Você pode achar isso%SOME_VAR:~0,-1%
.ADICIONAR 2 - 13:12 06/06/2018
%1-%9
consulte os argumentos da linha de comandos. Se eles não forem valores de caminho válidos,%~dp1
+%~dp9
serão expandidos para o mesmo valor que%~dp0
. Mas se forem valores de caminho válidos, eles serão expandidos para seu próprio valor de driver / caminho.Por exemplo: (batch.bat)
Execução 1:
Execução 2:
fonte
A variável
%0
em um script em lote é definida como o nome do arquivo em lotes em execução.A
~dp
sintaxe especial entre o%
e o0
basicamente diz para expandir a variável%0
para mostrar a letra e o caminho da unidade, que fornece o diretório atual que contém o arquivo em lotes!Help = Link
fonte
%0
diretamente no cmd sem salvar um arquivo. Bat no disco rígido local?% ~ dp0 expande para o caminho do diretório atual do arquivo em lotes em execução.
Para obter um entendimento claro, vamos criar um arquivo em lotes em um diretório.
com conteúdo:
Ao executá-lo no prompt de comando, você verá este resultado:
fonte
Outra dica que ajudaria muito é que, para definir o diretório atual para uma unidade diferente, seria necessário
%~d0
primeirocd %~dp0
. Isso alterará o diretório para a unidade do arquivo em lotes e, em seguida, para sua pasta.Como alternativa, para #oneLinerLovers, como @Omni apontou nos comentários
cd /d %~dp0
, mudará a unidade e o diretório :)Espero que isso ajude alguém.
fonte
cd
possui um parâmetro interno que alternará o inversor e a pasta:cd /d %~dp0
/d
argumento é útil, mas merece ser publicado como uma resposta alternativa candidata e não como um comentário a esta. Obrigado por apontar isso, porém, eu não sabia disso :)Ótimo exemplo do lançador de shell portátil da Strawberry Perl:
não tenho certeza do que o 1 negativo está fazendo lá, mas funciona um prazer!
fonte
Um exemplo seria bom - aqui está um exemplo trivial
lista apenas as EXTENSÕES de cada arquivo na pasta atual
para obter combinações de variáveis mais úteis (também listadas na resposta anterior) no prompt do CMD execute:
HELP FOR
que contém esse trechoOs modificadores podem ser combinados para obter resultados compostos:
fonte