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".

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top