Ferramenta para “marcadores” de linha de comando no Windows?
-
09-06-2019 - |
Pergunta
Estou procurando uma ferramenta que me permita especificar algumas pastas como "favoritos" e acessá-las na linha de comando (no Windows XP) por meio de uma palavra-chave.Algo como:
C:\> go home
D:\profiles\user\home\> go svn-project1
D:\projects\project1\svn\branch\src\>
Atualmente estou usando vários arquivos em lote, mas editá-los manualmente é uma tarefa difícil.No Linux existe cdargs ou marcadores de shell mas não encontrei nada no Windows.
Obrigado pela sugestão do Powershell, mas não tenho permissão para instalá-lo na minha caixa no trabalho, então deve ser uma solução cmd.exe "clássica".
Solução
O que você está procurando se chama DOSKEY
Você pode usar o comando doskey para criar macros no interpretador de comandos.Por exemplo:
doskey mcd=mkdir "$*"$Tpushd "$*"
cria um novo comando "mcd" que cria um novo diretório e depois muda para esse diretório (prefiro "pushd" a "cd" neste caso porque me permite usar "popd" mais tarde para voltar para onde estava antes)
O $* será substituído pelo restante da linha de comando após a macro, e o $T será usado para delimitar os dois comandos diferentes que desejo avaliar.Se eu digitasse:
mcd foo/bar
na linha de comando, seria equivalente a:
mkdir "foo/bar"&pushd "foo/bar"
A próxima etapa é criar um arquivo que contém um conjunto de macros que você pode importar usando a opção /macrofile.Eu tenho um arquivo (c: ools\doskey.macros) que define os comandos que uso regularmente.Cada macro deve ser especificada em uma linha com a mesma sintaxe acima.
Mas você não quer ter que importar manualmente suas macros toda vez que iniciar um novo interpretador de comandos, para que isso aconteça automaticamente, basta abrir a chave de registro
HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\AutoRun e defina o valor como doskey /macrofile "c: ools\doskey.macro".Isso garantirá que suas macros sejam predefinidas automaticamente sempre que você iniciar um novo interpretador.
Pensamentos extras:- Se quiser fazer outras coisas no AutoRun (como definir parâmetros de ambiente), você pode delimitar os comandos com o e comercial.O meu se parece com:set root = c: somedir & Doskey /macrofile "c: tools doskey.macros" - se você preferir que suas configurações de autorun sejam definidas por usuário, você pode usar o nó HKCU em vez de hklm.- Você também pode usar doskey para controlar coisas como o tamanho do histórico de comandos.- Gosto de encerrar todas as minhas macros de navegação com $* para que eu possa encadear as coisas - tenha cuidado para adicionar cotações, conforme apropriado, em suas macros, se você quiser lidar com caminhos com espaços.
Outras dicas
Eu estava procurando exatamente essa funcionalidade, para casos simples.Não consegui encontrar uma solução, então eu mesmo criei uma:
@ECHO OFF
REM Source found on https://github.com/DieterDePaepe/windows-scripts
REM Please share any improvements made!
REM Folder where all links will end up
set WARP_REPO=%USERPROFILE%\.warp
IF [%1]==[/?] GOTO :help
IF [%1]==[--help] GOTO :help
IF [%1]==[/create] GOTO :create
IF [%1]==[/remove] GOTO :remove
IF [%1]==[/list] GOTO :list
set /p WARP_DIR=<%WARP_REPO%\%1
cd %WARP_DIR%
GOTO :end
:create
IF [%2]==[] (
ECHO Missing name for bookmark
GOTO :EOF
)
if not exist %WARP_REPO%\NUL mkdir %WARP_REPO%
ECHO %cd% > %WARP_REPO%\%2
ECHO Created bookmark "%2"
GOTO :end
:list
dir %WARP_REPO% /B
GOTO :end
:remove
IF [%2]==[] (
ECHO Missing name for bookmark
GOTO :EOF
)
if not exist %WARP_REPO%\%2 (
ECHO Bookmark does not exist: %2
GOTO :EOF
)
del %WARP_REPO%\%2
GOTO :end
:help
ECHO Create or navigate to folder bookmarks.
ECHO.
ECHO warp /? Display this help
ECHO warp [bookmark] Navigate to existing bookmark
ECHO warp /remove [bookmark] Remove an existing bookmark
ECHO warp /create [bookmark] Navigate to existing bookmark
ECHO warp /list List existing bookmarks
ECHO.
:end
Você pode listar, criar e excluir marcadores.Os marcadores são armazenados em arquivos de texto em uma pasta no diretório do usuário.
Uso (copiado da versão atual):
Um marcador de pasta para uso no terminal.
c:\Temp>warp /create temp # Create a new bookmark
Created bookmark "temp"
c:\Temp>cd c:\Users\Public # Go somewhere else
c:\Users\Public>warp temp # Go to the stored bookmark
c:\Temp>
Cada warp usa um comando pushd, para que você possa rastrear seus passos usando popd.
c:\Users\Public>warp temp
c:\Temp>popd
c:\Users\Public>
Abra uma pasta de um favorito no explorer usando warp /window <bookmark>
.
Liste todas as opções disponíveis usando warp /?
.
Com apenas um arquivo em lote, tente isto ...(salve como nome de arquivo "go.bat")
@echo off
set BookMarkFolder=c:\data\cline\bookmarks\
if exist %BookMarkFolder%%1.lnk start %BookMarkFolder%%1.lnk
if exist %BookMarkFolder%%1.bat start %BookMarkFolder%%1.bat
if exist %BookMarkFolder%%1.vbs start %BookMarkFolder%%1.vbs
if exist %BookMarkFolder%%1.URL start %BookMarkFolder%%1.URL
Quaisquer atalhos, arquivos em lote, scripts VBS ou atalhos da Internet que você colocar em sua pasta de favoritos (neste caso, "c:\data\cline\bookmarks\" podem ser abertos/acessados digitando "go nome do favorito"
por exemplo.Eu tenho um marcador chamado "stack.url".Digitar go stack me leva direto para esta página.
Você também pode querer investigar Lançador
Com o PowerShell você pode adicionar as pastas como variáveis no seu arquivo profile.ps1, como:
$vids="C:\Users\mabster\Videos"
Então, como no Unix, você pode simplesmente consultar as variáveis em seus comandos:
cd $vids
Ter uma lista de atribuições de variáveis em um arquivo ps1 é provavelmente mais fácil do que manter arquivos em lote separados.
Outra abordagem alternativa que você pode considerar seria ter uma pasta que contenha links simbólicos para cada um de seus projetos ou diretórios usados com frequência.Então você pode fazer algo como
cd \go\svn-project-1 cd \go\my-douments
Links simbólicos podem ser feitos em um disco NTFS usando o Junção ferramenta
Sem o Powershell você pode fazer assim:
C:\>set DOOMED=c:\windows
C:\>cd %DOOMED%
C:\WINDOWS>
Crono escreveu:
As variáveis de ambiente definidas por meio de "set" não se destinam apenas à sessão atual?Posso persisti-los?
Eles são definidos para o processo atual e, por padrão, herdados por qualquer processo criado por ele.Eles não são persistidos no registro.Seu escopo pode ser limitado em scripts cmd com “setlocal” (e “endlocal”).
Variáveis ambientais?
set home=D:\profiles\user\home
set svn-project1=D:\projects\project1\svn\branch\src
cd %home%
No Unix eu uso isso junto com popd/pushd/cd - o tempo todo.