65.9K
CodeProject 正在变化。 阅读更多。
Home

简化 Windows 命令提示符中的导航

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.71/5 (3投票s)

2016年3月6日

CPOL

7分钟阅读

viewsIcon

6671

downloadIcon

58

如何创建批处理文件,让在命令提示符中浏览文件系统变得轻而易举。

引言

这些文件的创建源于希望在使用命令提示符时能够更轻松地浏览文件系统。不得不输入长路径、反复切换以查看当前目录中的文件夹列表以查找未知的文件夹名称,然后使用不同的命令进入该文件夹,只是为了重新开始这个过程,这让人感到沮丧。使用这些命令,您将能够更轻松地更改目录,以及快速将重要且常用的路径保存到列表中,每个保存的路径都可以通过索引号访问。这些命令还有更多好处,让我们开始吧。

使用代码

要使用这些文件,请将它们放置在您的“C:\Windows”文件夹中,或者将它们所在的目录路径添加到您的PATH环境变量中。这样,每次打开命令行时,您都可以将它们作为命令使用。请务必使用`/V`选项运行命令行,以使命令正常运行。

本文解释了三个文件。如果您检查下载的文件,可能会注意到它们都以这一行开头:

@echo off

这可以防止在运行命令时提示符显示每个操作。尽管所有文件中都存在这一行,但我只会在这里解释一次。

现在让我们开始,从最简单的批处理文件开始。

“UP”命令

这个文件用于命令提示符中,可以轻松地向上导航——你猜对了——向上。

首先,我们检查是否有参数。如果没有,我们只需向上导航一个文件夹,然后跳到文件末尾。

if [%1]==[] cd.. & goto :eof

如果指定的参数是一个数字,我们将一个变量设置为该参数的值。如果参数不是数字,它默认为0,这意味着不会执行任何操作。

set /a num=%1

接下来,我们检查该数字是否大于零,如果大于零,我们使用“`for`”循环,迭代次数由我们刚刚设置的变量指定。每次迭代都会向上导航一个目录。

if /i %num% geq 0 (
    for /l %%i in (1,1,%num%) do cd..
)

“INITVARS”命令

`initvars`命令用于从文件读取已保存路径的列表,并为命令提示符会话设置带索引的变量,这些变量的值就是路径,同时还设置其他必要的变量。它不应该需要手动调用,因为在使用`nav`命令时,此脚本会在需要时自动运行,但我仍将解释该脚本的工作原理。

首先,需要设置一个变量,其值为包含您使用`nav`命令保存的路径的文本文件的路径。您可以将“savedpaths.txt”的默认路径更改为您希望文件存储的任何路径。然后,脚本会确保文件存在,如果不存在,则会在指定位置创建它。

接下来,我们声明一个名为`navindex`的变量,供脚本稍后使用,并将其值设置为1。

set list=savedpaths.txt
if not exist %list% echo.>%list%
set /a navindex=1

此文件的最后是一个“`for`”循环,它遍历已保存文件中的路径,并为每个路径创建一个会话变量。它们通过递增`navindex`变量的值并按顺序将数字附加到每个路径变量的名称来跟踪。

for /f "tokens=*" %%a in (%list%) do  (
    set nav!navindex!=%%a
    set /a navindex+=1
)
set /a navindex-=1

“NAV”命令

创建导航文件的第一步是设置文件使用的所有必需变量,因此我们将在做任何其他事情之前调用`initvars`脚本。

call initvars

接下来,我们需要通过一系列“`if`”语句检查参数使用情况。这些参数通过跳转到脚本中特定位置的标签来控制您正在使用的工具的哪个功能。

if [%1]==[] goto :help
if [%1]==[/?] goto :help
if [%1]==[/v] goto :view
if [%1]==[/s] goto :save
if [%1]==[/x] goto :delete

goto :jump

现在我们已经有了导航到命名标签的调用,我们现在需要添加标签目的地和命令的五个主要功能中的每个功能的代码。

我们将从“`help`”标签开始。此部分只是将使用信息打印到提示符,然后跳转到脚本文件的末尾。

:help
echo.
echo  Options
echo  ----------------------------
echo  /v : views all shortcuts
echo  /s : saves the current path to a shortcut
echo  /x : deletes a shortcut at the specified number

goto :eof

“`view`”标签的脚本有点复杂,因为它使用了一个“`for`”循环和变量扩展。此循环使用`/L`选项,该选项用于从最小值到最大值以指定的增量进行迭代。每次迭代的数字值由`%%i`变量持有,并且可以在为迭代运行的代码中访问。我们在这里将最小值设置为1,增量也设置为1,但我们将最大值设置为`navindex`变量,该变量应该已经设置为快捷方式列表中存储的路径数量。

在迭代的代码中,我们打印出`%%i`的当前值以及由当前迭代值加上前缀“nav.”命名的变量的扩展值。然后它完成了它的工作并跳到文件末尾。

:view
for /l %%i in (1,1,!navindex!) do echo %%i: !nav%%i!

goto :eof

我们现在将检查“`save`”选项的代码。此代码用于将当前目录的路径附加到我们在`initvars`文件中设置的路径的文件中。然后它调用该文件以清除并重新声明所有必要的变量,同时考虑新添加的路径值。像以前一样,任务完成,所以它跳到文件末尾。

:save
echo.%cd%>>%list%

call initvars

goto :eof

我们将查看的下一个命令选项位于“`delete`”标签下。此选项可以接受一个参数,该参数将指定要删除的路径的索引。它的功能是(将保存的路径存储为变量)清除存储路径的文件,然后遍历存储在内存中的路径,并检查其索引是否与指定为参数的索引匹配。如果不匹配,它会继续将路径添加回保存文件。如果匹配,它会跳过将该路径添加到文件。一旦所有索引都已检查,它会清除存储在内存中的路径并重新初始化它们,然后跳到文件末尾。

:delete
echo.>%list%
for /l %%i in (1,1,%navindex%) do (
    if not [%%i]==[%2] (
        if defined nav%2 ( echo !nav%%i!>>!list! )
    )
)
call initvars

goto :eof

要跳转到特定的已保存路径,我们需要在“`jump`”标签下编写代码。此代码运行一个“`for`”循环,该循环迭代50个数字(如果您需要更多路径,可以增加)。对于每个数字,它会添加标准前缀并检查变量是否已定义。如果已定义,它会导航到使用该变量名称存储的路径并跳转到文件末尾。此代码仅在指定参数为数字时执行操作。如果参数与任何数字不匹配,它将继续到下一个标签以对指定参数执行进一步检查。

:jump
for /l %%i in (1,1,50) do (
    if [%%i]==[%1] (
        if defined nav%1 cd /d !nav%1!
        goto :eof
    )
)

`nav`命令的最后一个选项是“`follow`”标签。当未指定其他选项但命令仍有参数时,将执行此操作。它在外观上可能是所有脚本中最令人困惑的,但功能却相当简单。它允许您指定一个或多个要导航到的文件夹,用空格而不是斜杠分隔。有些人可能觉得此功能没有帮助,但我个人认为这是一种更简单的指定目录的方式。

此选项的代码首先取消设置一个名为“`loc`”的变量,以确保它从头开始工作。然后,该变量会附加您指定的每个文件夹名称,并在适当的位置为您添加斜杠。这发生在另一个“`for`”循环中,该循环使用包含传递给命令的所有参数的`%*`变量。如果您需要指定包含空格的目录名称,请用引号将名称括起来,代码会在必要时将其删除。

路径组装完成后,脚本会尝试导航到现在完整的路径。它还会在执行时自动指定选项,使导航到其他驱动器成为可能,因此在文件系统中移动时,您不必再为此烦恼。

:follow
set loc=
for %%a in (%*) do (
    set tmp=%%a
    set loc=!loc!!tmp:"=!/
)

cd /d "%loc%"

以上就是命令的内部结构,现在是一些如何使用它们来简化命令行导航的示例。请务必下载完整的批处理文件集合。

在 Windows 命令提示符中更轻松地导航 - CodeProject - 代码之家
© . All rights reserved.