Eu sei que %0
contém o caminho completo do script em lote, por exemploc:\path\to\my\file\abc.bat
Eu seria path
igual ac:\path\to\my\file
Como eu consegui isso?
Eu sei que %0
contém o caminho completo do script em lote, por exemploc:\path\to\my\file\abc.bat
Eu seria path
igual ac:\path\to\my\file
Como eu consegui isso?
Respostas:
%~dp0
será 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,m
sintaxe da substring, da seguinte maneira:
SET mypath=%~dp0
echo %mypath:~0,-1%
Não acredito que haja uma maneira de combinar a %0
sintaxe com a :~n,m
sintaxe, infelizmente.
%~0\..
- sabia que tinha que haver uma maneira melhor! Além disso, você provavelmente desejará colocar %~dp0
aspas duplas ( ""
) caso haja espaços no nome do diretório etc.
%~dp0
contém o `` no final. Você tem uma idéia de como removê-lo?
SET msg=hello world
funciona 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"
%~dp0
pode ser um caminho relativo. Para convertê-lo em um caminho completo, tente algo como isto:
pushd %~dp0
set script_dir=%CD%
popd
%~dp0
diretamente?
%~dp0
pode ser relativo, o que pode ou não ser um problema, dependendo do caso de uso
%~dp0
não pode conter um caminho relativo, d
significa unidade e p
caminho, 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