batch-file cmd显示当前路径 - 什么是批处理文件中的当前目录?




windows命令行运行bat bat文件编写 (6)

在批处理文件中,%cd%是当前目录最常用的命令,但您可以设置自己的变量:

set mypath=%cd%
echo %mypath% (where %mypath% is the current directory that the batch file is sitting in)

所以说你想打开Myprog.exe。 如果它在同一个文件夹中,则可以使用以下命令:

start %mypath%\Myprog.exe

这将从当前文件夹打开Myprog。

另一种选择是在C中创建一个名为AutomatePrograms的目录。 然后,您将文件传输到该文件夹​​,然后使用以下命令打开它们:

start "" "C:\AutomatePrograms\Myprog1.exe"
start "" "C:\AutomatePrograms\Myprog2.exe"
start "" "C:\AutomatePrograms\Myprog3.exe"

我想创建几个批处理文件来自动化一个程序。

我的问题是当我创建批处理文件时,当前目录是什么? 它是文件所在的目录,还是与命令提示符中出现的目录相同或其他?


它是您开始批处理文件的目录。 例如,如果您的批处理文件位于c:\dir1\dir2并且执行cd c:\dir3 ,然后运行该批处理文件,则当前目录将为c:\dir3


它是运行命令执行批处理文件的目录。

正如在上面的答案中提到的,您可以将以下命令添加到脚本中以验证:

> set current_dir=%cd%
> echo %current_dir%  

从您的批处理文件中:

  • %cd%指的是当前工作目录 (变量)
  • %~dp0指向批处理文件目录的完整路径(静态)
  • %~dpnx0指向批处理目录和文件名(静态)的完整路径。

通常是从中启动批处理文件的目录,但如果从快捷方式启动批处理文件,则可以提供不同的起始目录。 另外,当你在cmd中,并且当前目录是c:\dir3 ,仍可以使用c:\dir1\dir2\batch.bat启动批处理文件,在这种情况下,当前目录将是c:\dir3


pwd可用于查找当前工作目录,而dirname用于查找特定文件的目录(运行的命令为$0 ,因此dirname $0应该为您提供当前脚本的目录)。

但是, dirname精确地给出了文件名的目录部分,它很可能与当前工作目录相关。 如果您的脚本由于某种原因需要更改目录,那么dirname的输出将变得毫无意义。

我建议如下:

#!/bin/bash

reldir=`dirname $0`
cd $reldir
directory=`pwd`

echo "Directory is $directory"

这样,你得到一个绝对的,而不是相对的目录。

由于脚本将在单独的bash实例中运行,因此之后无需恢复工作目录,但如果由于某种原因确实想要更改脚本,则可以轻松地将pwd的值分配给变量您更改目录,以备将来使用。

虽然只是

cd `dirname $0`

解决了问题中的具体情况,我发现通常有更多有用的绝对路径。





batch-file directory