2008-08-28 25 views
10

Estoy buscando una herramienta que me permite especificar algunas carpetas como "marcadores" y acceder a ellas en la línea de comandos (en Windows XP) a través de una palabra clave. Algo así como:¿Herramienta para "marcadores" de línea de comandos en Windows?

C:\> go home 
D:\profiles\user\home\> go svn-project1 
D:\projects\project1\svn\branch\src\> 

Actualmente estoy usando un montón de archivos por lotes, pero la edición de ellos a mano es una tarea de enormes proporciones. En Linux hay cdargs o shell bookmarks pero no he encontrado algo en Windows.


Gracias por la sugerencia PowerShell, pero no se me permite instalarlo en mi caja en el trabajo, por lo que debería ser una solución cmd.exe "clásico".

Respuesta

20

Lo que usted está buscando se llama DOSKEY

Puede utilizar el comando doskey para crear macros en el intérprete de comandos. Por ejemplo:

doskey mcd=mkdir "$*"$Tpushd "$*" 

crea un nuevo comando "mcd" que crea un nuevo directorio y luego cambia a ese directorio (prefiero "pushd" a "CD" en este caso, ya que me permite usar "popd" más adelante para volver a donde estaba antes)

El $ * se reemplazará con el resto de la línea de comando después de la macro, y $ T se utiliza para delimitar los dos comandos diferentes que quiero evaluar. Si he escrito:

mcd foo/bar 

en la línea de comandos, sería equivalente a:

mkdir "foo/bar"&pushd "foo/bar" 

El siguiente paso es crear un archivo que contiene un conjunto de macros que luego se puede importar mediante el uso de el modificador/macrofile. Tengo un archivo (c: \ tools \ doskey.macros) que define los comandos que utilizo regularmente. Cada macro debe especificarse en una línea con la misma sintaxis que la anterior.

Pero usted no quiere tener que importar manualmente las macros cada vez que inicie un nuevo intérprete de comandos, para que esto ocurra de forma automática, basta con abrir la clave de registro

Procesador

HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Command \ AutoRun y ​​establezca el valor para ser doskey/macrofile "c: \ tools \ doskey.macro".Al hacer esto, se asegurará de que sus macros estén predefinidas automáticamente cada vez que inicie un nuevo intérprete.

Reflexiones adicionales: - Si quiere hacer otras cosas en AutoRun (como establecer parámetros de entorno), puede delimitar los comandos con el símbolo comercial. El mío se ve así: establecer root = c: \ SomeDir & doskey/macrofile "c: \ tools \ doskey.macros" - Si prefiere que la configuración de AutoRun se establezca por usuario, puede usar el nodo HKCU en lugar de HKLM. - También puede usar doskey para controlar cosas como el tamaño del historial de comandos. - Me gusta terminar todas mis macros de navegación con \ $ * para poder encadenar las cosas juntas - Tenga cuidado de agregar citas según corresponda en sus macros si desea poder manejar rutas con espacios en ellas.

+0

FYI, en Windows 7 (yo solo ahora), el comando doskey es actualmente 'doskey /macrofile="c:\tools\doskey.macros' '. Tuve que buscar eso. Además, si su registro no tiene AutoRun (el mío no), tenga en cuenta que se trata de un valor de cadena en el procesador de comandos, no su propia clave. El \ me tiró (o también ha cambiado). De lo contrario, ¡muchas gracias! – joedragons

+1

¡Gracias, esto es exactamente lo que estaba buscando! Observé que en el valor 'AutoRun' puede insertar también la ruta completa a un archivo por lotes, que puede ser más flexible. – andynaz

3

Con PowerShell se podría añadir las carpetas como variables del archivo de profile.ps1, como:

$vids="C:\Users\mabster\Videos" 

Entonces, como Unix, sólo puede referirse a las variables en sus comandos:

cd $vids 

Tener una lista de asignaciones de variables en el archivo ps1 es probablemente más fácil que mantener archivos separados por lotes.

1

Sin Powershell que puede hacerlo de esta manera: las variables

C:\>set DOOMED=c:\windows 
C:\>cd %DOOMED% 
C:\WINDOWS> 
0

medio ambiente?

set home=D:\profiles\user\home 
set svn-project1=D:\projects\project1\svn\branch\src 

cd %home% 

En Unix utilizo esto junto con popd/pushd/cd - todo el tiempo.

4

Con sólo un archivo por lotes, probar este ... (guardar como nombre de archivo "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 

Cualquier accesos directos, archivos por lotes, VBS scripts o accesos directos a Internet que pone en su carpeta de favoritos (en este caso "c: \ data \ \ Cline marcadores \", entonces se puede abrir/visitada escribiendo "ir bookmarkname"

por ejemplo, que tienen un marcador denominado "stack.url" escribiendo pila va me lleva directamente. a esta página.

Quizás también desee para investigar Launchy

2

Otro enfoque alternativo que quizás desee considerar podría ser tener una carpeta que contenga enlaces simbólicos a cada uno de sus proyectos o directorios de uso frecuente. Así que usted puede hacer algo como

 
cd \go\svn-project-1 
cd \go\my-douments 

enlaces simbólicos se puede hacer en un disco NTFS con la función Junction

1

Crono escribió:

son variables de entorno definidas a través de "ajuste" no significaba para la sesión actual solamente? ¿Puedo persistir?

Se establecen para el proceso actual, y por defecto heredado por cualquier proceso que crea. No se conservan en el registro. Su alcance puede ser limitado en scripts cmd con "setlocal" (y "endlocal").

5

Estaba buscando esta funcionalidad exacta, para casos simples. No pude encontrar una solución, así que hice una yo mismo:

@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 

Puede enumerar, crear y borrar marcadores. Los marcadores se almacenan en archivos de texto en una carpeta en su directorio de usuario.

Uso (copiado de la versión actual):

Un marcador de libros carpeta para su uso en el 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 urdimbre usa un comando pushd, por lo que puede seguir sus pasos usando popd.

c:\Users\Public>warp temp 
c:\Temp>popd 
c:\Users\Public> 

Abrir una carpeta de un marcador en el explorador utilizando warp /window <bookmark>.

Listar todas las opciones disponibles usando warp /?.

+1

Excelente solución, no sé por qué no tiene votos ascendentes, es mucho más elegante y simple de usar que cualquier otra publicación. –

Cuestiones relacionadas