12

我正在搜索一个工具,它允许我将一些文件夹指定为“书签”,然后通过关键字在命令行(在 Windows XP 上)上访问它们。就像是:

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

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


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

4

8 回答 8

24

您要查找的内容称为 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" - 如果您希望按用户设置自动运行设置,您可以使用 HKCU 节点而不是 HKLM。- 你也可以使用 doskey 来控制命令历史的大小。- 我喜欢用 \$* 结束我所有的导航宏,这样我就可以将它们链接在一起 - 如果您希望能够处理带有空格的路径,请小心在宏中添加适当的引号。

于 2008-08-28T11:23:38.290 回答
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 /?

于 2016-04-13T21:00:16.830 回答
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 ”来打开/访问

例如,我有一个名为“stack.url”的书签。输入 go stack 直接进入这个页面。

您可能还想调查Launchy

于 2008-08-28T11:34:45.687 回答
3

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

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

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

cd $vids

在一个 ps1 文件中拥有变量分配列表可能比维护单独的批处理文件更容易。

于 2008-08-28T10:53:53.867 回答
2

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

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

可以使用Junction工具在 NTFS 磁盘上创建符号链接

于 2008-08-28T11:38:29.923 回答
1

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

C:\>set DOOMED=c:\windows
C:\>cd %DOOMED%
C:\WINDOWS>
于 2008-08-28T10:57:01.753 回答
1

克罗诺写道:

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

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

于 2008-08-28T23:56:51.723 回答
0

环境变量?

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

cd %home%

在 Unix 上,我一直将它与 popd/pushd/cd 一起使用。

于 2008-08-28T10:58:30.363 回答