Windows上命令行“书签”的工具?

时间:2008-08-28 10:47:38

标签: command-line

我正在搜索一个允许我将某些文件夹指定为“书签”的工具,而不是通过关键字在命令行(在Windows XP上)访问它们。类似的东西:

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

我目前正在使用一堆批处理文件,但手动编辑它们是一项艰巨的任务。在Linux上有cdargsshell bookmarks但我在Windows上找不到任何东西。


感谢Powershell的建议,但是我不允许在工作时将它安装在我的盒子上,所以它应该是一个“经典”的cmd.exe解决方案。

8 个答案:

答案 0 :(得分:23)

您要找的是DOSKEY

您可以使用doskey命令在命令解释程序中创建宏。例如:

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

创建一个新命令“mcd”,创建一个新目录,然后更改到该目录(在这种情况下我更喜欢“pushd”到“cd”,因为它让我以后使用“popd”回到我原来的位置前)

$ *将替换为宏后命令行的其余部分,$ T用于分隔我要评估的两个不同命令。如果我输入:

mcd foo/bar 

在命令行中,它等同于:

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

下一步是创建一个包含一组宏的文件,然后可以使用/ macrofile开关导入这些宏。我有一个文件(c:\ tools \ doskey.macros),它定义了我经常使用的命令。应在与上述语法相同的行上指定每个宏。

但是,您不希望每次启动新的命令解释程序时都手动导入宏,以使其自动执行,只需打开注册表项

HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Command Processor \ AutoRun并将值设置为doskey / macrofile“c:\ tools \ doskey.macro”。这样做可确保每次启动新解释器时都自动预定义宏。

额外的想法:   - 如果要在AutoRun中执行其他操作(如设置环境参数),可以使用&符号分隔命令。我看起来像:set root = c:\ SomeDir& doskey / macrofile“c:\ tools \ doskey.macros”   - 如果您希望按用户设置AutoRun设置,则可以使用HKCU节点而不是HKLM。   - 您还可以使用doskey来控制命令历史记录的大小。   - 我喜欢用\ $ *结束我的所有导航宏,这样我就可以将各种东西连在一起了   - 如果您希望能够处理包含空格的路径,请小心在宏中添加适当的引号。

答案 1 :(得分:5)

对于简单的情况,我一直在寻找这种确切的功能。无法找到解决方案,所以我自己做了一个:

@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

您可以列出,创建和删除书签。书签存储在用户目录的文件夹中的文本文件中。

用法(从当前版本复制):

在终端中使用的文件夹书签。

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>

每个warp都使用pushd命令,因此您可以使用popd追溯您的步骤。

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

使用warp /window <bookmark>在资源管理器中打开书签文件夹。

使用warp /?列出所有可用选项。

答案 2 :(得分:4)

只需一个批处理文件,试试这个......(另存为文件名“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

您放入书签文件夹的任何快捷方式,批处理文件,VBS脚本或Internet快捷方式(在本例中为“c:\ data \ cline \ bookmarks \”都可以通过输入“go bookmarkname <打开/访问” / EM>“

e.g。我有一个名为“stack.url”的书签。打字去堆栈直接带我到这个页面。

您可能还想调查Launchy

答案 3 :(得分:3)

使用PowerShell,您可以将文件夹作为变量添加到profile.ps1文件中,例如:

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

然后,像Unix一样,您可以在命令中引用变量:

cd $vids

在一个ps1文件中包含一个变量赋值列表可能比维护单独的批处理文件更容易。

答案 4 :(得分:2)

您可能需要考虑的另一种替代方法可能是拥有一个文件夹,其中包含每个项目或常用目录的符号链接。所以你可以做类似

的事情
cd \go\svn-project-1
cd \go\my-douments 

可以使用Junction工具

在NTFS磁盘上创建符号链接

答案 5 :(得分:1)

如果没有Powershell,您可以这样做:

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

答案 6 :(得分:1)

  

Crono写道:

     
    

通过“set”定义的环境变量是否仅适用于当前会话?我可以坚持下去吗?

  

它们是为当前进程设置的,默认情况下由它创建的任何进程继承。它们不会持久存储到注册表中。它们的范围可以用cmd脚本限制为“setlocal”(和“endlocal”)。

答案 7 :(得分:0)

环境变量?

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

cd %home%

在Unix上,我一直使用它和popd / pushd / cd。