Primeiro, vi esse tópico, mas não consegui entender.
Pergunta:
Há um arquivo em lotes D:\path\to\file.bat
com o seguinte conteúdo:
echo %cd%
pause
A saída é:
C:\
Deve ser D:\path\to
O que estou fazendo de errado?
windows
batch-file
working-directory
Hamed Kamrava
fonte
fonte
Respostas:
A variável somente leitura do sistema
%CD%
mantém o caminho do chamador do lote, não o local do arquivo em lote.Você pode obter o nome do script em lote, digitado pelo usuário com
%0
(por exemploscripts\mybatch.bat
). Extensões de parâmetros podem ser aplicadas a isso%~dp0
, retornando o Drive e o Caminho para o script em lote (por exemploW:\scripts\
) e%~f0
retornando o nome do caminho completo (por exemploW:\scripts\mybatch.cmd
).Você pode consultar outros arquivos na mesma pasta que o script em lote usando esta sintaxe:
Isso pode até ser usado em uma sub-rotina,
Echo %0
fornecerá o rótulo de chamada, masecho "%~nx0"
fornecerá o nome do arquivo do script em lote.Quando a
%0
variável é expandida, o resultado é colocado entre aspas.Mais sobre parâmetros de lote .
fonte
stm.sql
noD:\Dir1\Dir2\stm.sql
. Eu precisomysql.exe -u root -p mysql < %cd%\stm.sql
executar os comandos stm.sql.*.bat
ou*.sh
?D:\Dir1\Dir2\batchfile.bat
eD:\Dir1\Dir2\stm.sql
. O conteúdo do batchfile.bat é:mysql.exe -u root -p mysql < D:\Dir1\Dir2\stm.sql
e o conteúdo do stm.sql é alguns comandos do MySQL.echo %~dp0
retornará o caminho para o local do lote.echo %~f0
retornará o caminho para o lote com o nome do arquivo.Muito simples:
fonte
cd /d %~dp0
como primeira linha de arquivo de lote e trabalhouDentro do seu arquivo .bat:
Agora você pode usar a variável
%mypath%
para referenciar o caminho do.bat
arquivo. Para verificar se o caminho está correto:Por exemplo, um arquivo chamado
DIR.bat
com o seguinte conteúdoexecutar a partir do diretório
g:\test\bat
ecoará esse caminho na janela de comando do DOS.fonte
Aqui está o que eu uso na parte superior de todos os meus arquivos em lotes. Acabei de copiar / colar da minha pasta de modelos.
Definir o caminho do arquivo em lotes atual para% batdir% permite chamá-lo em stmts subseqüentes no arquivo em lotes atual, independentemente de onde esse arquivo em lote é alterado. O uso do PUSHD permite que você use o POPD para definir rapidamente o caminho desse arquivo em lote como% batdir% original. Lembre-se, se você estiver usando% batdir% ExtraDir ou% batdir% \ ExtraDir (dependendo da versão usada acima, terminando a barra invertida ou não), será necessário colocar a cadeia inteira entre aspas duplas se o caminho tiver espaços (por exemplo, "% batdir% ExtraDir" ) Você sempre pode usar PUSHD% ~ dp0. [https: // ss64.com/ nt / syntax-args .html] possui mais parâmetros (% ~).
Observe que usar (: :) no início de uma linha faz com que seja uma linha de comentário. Mais importante, usar :: permite incluir redirecionadores, canais, caracteres especiais (por exemplo, <> | etc) nesse comentário.
Claro, o Powershell faz isso e muito mais.
fonte
set batdir=%CD%
). Não está bom, porque é o caminho para o chamador, não o próprio arquivo bat. A única maneira válida de obter o caminho para o arquivo bat em execução é%~dp0
.