Eu sei que %0contém o caminho completo do script em lote, por exemploc:\path\to\my\file\abc.bat
Eu seria pathigual ac:\path\to\my\file
Como eu consegui isso?
Eu sei que %0contém o caminho completo do script em lote, por exemploc:\path\to\my\file\abc.bat
Eu seria pathigual ac:\path\to\my\file
Como eu consegui isso?
Respostas:
%~dp0será o diretório Aqui está uma documentação sobre todos os modificadores de caminho . Coisas divertidas :-)
Para remover a barra invertida final, você pode usar a :n,msintaxe da substring, da seguinte maneira:
SET mypath=%~dp0
echo %mypath:~0,-1%
Não acredito que haja uma maneira de combinar a %0sintaxe com a :~n,msintaxe, infelizmente.
%~0\..- sabia que tinha que haver uma maneira melhor! Além disso, você provavelmente desejará colocar %~dp0aspas duplas ( "") caso haja espaços no nome do diretório etc.
%~dp0contém o `` no final. Você tem uma idéia de como removê-lo?
SET msg=hello worldfunciona bem). No entanto, ao usar% mypath% em outro lugar, você deve tomar cuidado para usá-lo entre aspas, embora eles também não sejam necessários cd.
Você pode usar o script a seguir para obter o caminho sem arrastar "\"
for %%i in ("%~dp0.") do SET "mypath=%%~fi"
%~dp0pode ser um caminho relativo. Para convertê-lo em um caminho completo, tente algo como isto:
pushd %~dp0
set script_dir=%CD%
popd
%~dp0diretamente?
%~dp0pode ser relativo, o que pode ou não ser um problema, dependendo do caso de uso
%~dp0não pode conter um caminho relativo, dsignifica unidade e pcaminho, como uma unidade pode ser relativa?
%~dp0, será um caminho absoluto, mesmo quando o script foi executado como um caminho relativo. Graças ao comentário de jeb, não fui enganado por esta resposta. Por que as pessoas inventam coisas e vão começar a espalhar sua imaginação selvagem para outras pessoas? Eu tenho esse colega que faz isso, mas culpei a idade dele (jovem). Eu gostaria que meu voto negativo contasse.
Você pode usar %~dp0, d significa apenas a unidade, p significa apenas o caminho, 0 é o argumento para o nome completo do arquivo em lotes.
Por exemplo, se o caminho do arquivo fosse C: \ Users \ Oliver \ Desktop \ example.bat, o argumento seria igual a C: \ Users \ Oliver \ Desktop \, você também poderá usar o comando set cpath=%~dp0 && set cpath=%cpath:~0,-1%e usar o comando%cpath% variável para remover a barra final.
%cd% fornecerá o caminho do diretório a partir do qual o script está sendo executado.
Apenas corra:
echo %cd%
%CD%é a pasta de trabalho atual, não a pasta em que o arquivo em lotes está armazenado. Eles podem ser o mesmo local, mas geralmente não são.
Essa seria a %CD%variável.
@echo off
echo %CD%
%CD% retorna o diretório atual em que o script em lote está.
CD C:\Temp <CR> ECHO %CD%( <CR>é newline ...)
Estou trabalhando em uma máquina com Windows 7 e acabei usando as linhas abaixo para obter o caminho absoluto da pasta para o meu script bash.
Cheguei a esta solução depois de consultar http://www.linuxjournal.com/content/bash-parameter-expansion .
#Get the full aboslute filename.
filename=$0
#Remove everything after \. An extra \ seems to be necessary to escape something...
folder="${filename%\\*}"
#Echo...
echo $filename
echo $folder