Defina o título "abrir janela de comando aqui" como o diretório do qual foi invocado

2

Eu sei como definir o título como o diretório atual em um arquivo de lote normal.

Eu quero fazer isso para a janela cmd que abre quando você faz uma "janela de comando aberta aqui" a partir de uma pasta do Windows (automaticamente).

Eu sei que você pode executar um arquivo em lotes na inicialização de qualquer cmd e eu vi respostas para obter o nome do diretório , mas tentar obter o nome do diretório apenas fornece o nome diretamente onde autorun.cmd arquivo está em, não o nome do diretório que "abrir janela de comando aqui" cd s em.

Parece que, no momento em que o autorun.cmd é chamado, ele ainda não possui as informações sobre o diretório que será alterado para a janela de comando "abrir aqui". É esse o caso? Ou ainda há uma maneira de alterar o título automaticamente para o diretório atual?

    
por laggingreflex 15.11.2014 / 08:19

3 respostas

2

Eu tentaria a seguinte linha:

for %a in (.) do title %~na

Ou em um arquivo de lote você escaparia da % s uma vez:

for %%a in (.) do title %%~na

O loop for...do está lá apenas para colocar o caminho atual na variável, pois você não pode usar o operador ~ com variáveis de ambiente como ( %cd% ).

No entanto, como você notou, isso não funcionará para o "Prompt de Comando aqui", já que isso é executado antes que o diretório seja definido.

Para contornar isso, você basicamente terá que modificar a linha de comando sendo chamada sempre que usar essa funcionalidade.

Isso é controlado por duas variáveis no Registro, ambas sub chaves de HKEY_CLASSES_ROOT\Directory :

HKEY_CLASSES_ROOT\Directory\shell\cmd\command : Esta chave define o comando a ser executado quando você Shift + rightclick no ícone de diretório / pasta.

HKEY_CLASSES_ROOT\Directory\Background\shell\cmd\command : Esta tecla define o comando a ser executado quando você muda + rightclick em algum lugar em uma janela aberta do Explorer.

Por padrão, ambos os valores padrão são definidos como cmd.exe /s /k pushd "%V" , o que abrirá uma janela de comando e alterará o diretório para o parâmetro passado como %V .

Para que isso funcione, você terá que editar esses dois valores padrão e anexar o comando acima, ligeiramente modificado. Basta definir os dois valores padrão para isso:

cmd.exe /s /k "pushd ""%V"" && for %%A in (%V) do @title %%~nA"

Observe as aspas duplas para escapá-las corretamente, já que tudo é colocado em um único par de aspas para agrupar tudo para o parâmetro% empo% de cmd.exe . O /k irá esconder o comando de mostrar dentro da janela de comando.

Isso funciona para mim, mas há um pequeno detalhe envolvido: se o nome do diretório contiver mais de um ponto, como @ , isso nomeará o título one.two.three apenas.

Lembre-se também de que o título não será atualizado quando o CD for para outro diretório. Fazer isso funcionar seria um pouco mais complicado (ou talvez até impossível; não tentei).

    
por 17.11.2014 / 09:30
1

Inspirado na pergunta, adicionei algumas funcionalidades divertidas à linha de comando no meu Windows: pseudo comandos cdn , pushdn e popdn (trailing N = acrônimo novo ou nomeação ou até mesmo absurdos ou qualquer outra coisa) correspondente aos comandos cd , pushd e popd . Esses comandos pseudo ajudam a manter meu título da janela cmd paralelo ao caminho do diretório cmd atual da seguinte forma:

current directory    window title
------------------   --------------
X:\subpath\subfold   X:\ ..\subfold 
X:\folder            X:\folder
X:\                  X:\

para qualquer unidade X: e profundidade arbitrária de subpath .

Exemplo de código: cdn.bat colocado em qualquer pasta explícita na variável de ambiente path .

@rem cdn.bat
@rem change directory (and drive) || abort script processing in case of bad success
@cd /D %* || @goto :eof
@rem eliminate (if any in %*) trailing backslashes, surrouding double-quotes
@rem and/or (combined) symbols to current, parent or root directory (., .., \)
@call :window_title "%CD%"
@rem or, to title window to bare folder name, use: 
@rem @for /F "tokens=*" %%G in ("%CD%") do @title %%~nG%%~xG
@goto :eof

:window_title
  @if "%~p1%~n1%~x1" == "\%~n1%~x1" (
    @rem window title to 'X:\folder' on highest-level path or to 'X:\' on drive root
    @title %~d1%~p1%~n1%~x1
  ) else (
    @rem window title to 'X:\...\folder' otherwise (i.e. nor root, nor highest-level)
    @title %~d1^\ ..^\%~n1%~x1
  )
  @exit /B

Prazer em compartilhar meu prazer.

    
por 21.11.2014 / 19:59
0

Agora, é possível manter-se atualizado automaticamente após qualquer comando, sem redefinir o 'cd', etc. Consulte Alterar o prompt de comando para mostrar apenas as informações atuais. nome do diretório

    
por 10.10.2018 / 00:20