Um arquivo em lote do Windows pode determinar seu próprio nome de arquivo?
Por exemplo, se eu executar o arquivo em lote C: \ Temp \ myScript.bat, há um comando em myScript.bat que pode determinar a string "myScript.bat"?
windows
batch-file
cmd
Djangofan
fonte
fonte
%0
é o que você está procurando. Veja [esta questão] [1] para mais. [1]: stackoverflow.com/questions/357315/…Respostas:
Sim.
Use a
%0
variável especial para obter o caminho para o arquivo atual.Escreva
%~n0
para obter apenas o nome do arquivo sem a extensão.Escreva
%~n0%~x0
para obter o nome do arquivo e a extensão.Também é possível escrever
%~nx0
para obter o nome do arquivo e a extensão.fonte
cd
entrar no diretório primeiro e executar o lote de lá,% 0 normalmente não terá as informações do caminho (mas você poderia obtê-las em% cd% nesse caso)%cd%
retornará o Diretório Atual do processo que chamou o arquivo em lote. Portanto, se você estiver em um promptD:\dir1
e entrarY:\foo\bar.bat
, sebar.bat
tiver@echo %cd%
, ele será enviadoD:\dir1
.Você pode obter o nome do arquivo, mas também pode obter o caminho completo, dependendo do que você colocar entre '% ~' e '0'. Escolha entre
Por exemplo, de dentro de c: \ tmp \ foo.bat,
%~nx0
fornece "foo.bat", enquanto%~dpnx0
fornece "c: \ tmp \ foo.bat". Observe que as peças são sempre montadas em ordem canônica, então, se você for engraçado e tentar%~xnpd0
, ainda obterá "c: \ tmp \ foo.bat"fonte
f
é o nome do arquivo, mas em seus exemplos você usan
para o nome do arquivo. Após alguns testes, parece quef
é o caminho completo en
é o nome do arquivo.%~xnpd0
" ... eu te amo.Usando o seguinte script, com base na resposta do SLaks, determinei que a resposta correta é:
E aqui está meu script de teste:
O que acho interessante é que % nx0 não funcionará, visto que sabemos que o caractere '~' geralmente é usado para retirar / cortar aspas de uma variável.
fonte
Lembre-se de que
0
é um caso especial de números de parâmetros dentro de um arquivo em lote, onde0
significa que esse arquivo é fornecido na linha de comando .Portanto, se o arquivo for meuarquivo.bat, você pode chamá-lo de várias maneiras da seguinte maneira, cada uma das quais forneceria uma saída diferente do uso
%0
ou%~0
:myfile
myfile.bat
mydir\myfile.bat
c:\mydir\myfile.bat
"c:\mydir\myfile.bat"
Todas as opções acima são chamadas legais se você chamá-lo do local relativo correto para o diretório no qual ele existe.
%~0
remove as aspas do último exemplo, enquanto%0
mas não.Porque todos eles fornecem resultados diferentes,
%0
e%~0
é muito improvável que sejam o que você realmente deseja usar.Aqui está um arquivo em lote para ilustrar:
fonte
Tente executar o exemplo abaixo para sentir como as variáveis mágicas funcionam.
As regras relacionadas estão a seguir.
fonte
Abaixo está meu código inicial:
Percebi que o nome do arquivo fornecido por% ~ 0 e% 0 é a forma como foi inserido no shell de comando e não como o arquivo é realmente nomeado. Portanto, se você quiser que o caso literal seja usado para o nome do arquivo, você deve usar% ~ n0. No entanto, isso deixará de fora a extensão do arquivo. Mas se você souber o nome do arquivo, poderá adicionar o código a seguir.
Eu aprendi que ": ~ 8,4%" significa começar no 9º caractere da variável e então mostrar os próximos 4 caracteres. O intervalo é de 0 até o final da string variável. Portanto,% Path% seria muito longo!
No entanto, isso não é tão sólido quanto a solução de Jool (% ~ x0) acima.
Minha evidência:
Aqui está o código final
fonte