我如何找到一个批处理文件的工作目录,然后使用它的路径?

我有一个批处理文件,我打算分发给我们的客户运行软件任务。

我们把它们作为文件夹或者 .zip发布,里面有文件。里面有批处理文件和另一个文件夹,其中包含运行批处理所需的文件。

通常,在进行批处理时,键入文件所在的路径。但我不知道文件在哪。这些文件仍然保存在主文件夹中,但是我需要让批处理文件找到那个文件夹来运行这些文件。

例如: 如果他们在桌面上有主文件夹并且运行它,那么它需要像 "C:\Users\Username\Desktop"这样的东西才能运行。你会把那批 CD 带到那个地方。

但如果他们从文件里查呢?我不知道用户名,所以我得想办法让那批货找到这个。任何代码和/或指令都可以。

178212 次浏览

试试看

set "batchisin=%~dp0"

它应该将变量设置为批处理的位置。

你也可以

 Pushd "%~dp0"

它还考虑从 unc 路径运行。

不需要知道文件在哪里,因为当你启动一个 bat 文件时,工作目录就是它被启动的目录(“主文件夹”) ,所以如果你有这样的结构:

.\mydocuments\folder\mybat.bat
.\mydocuments\folder\subfolder\file.txt

然后用户启动“ mybat.bat”,工作目录是。“我的文档文件夹”,因此您只需在脚本中写入子文件夹名称:

@Echo OFF
REM Do anything with ".\Subfolder\File1.txt"
PUSHD ".\Subfolder"
Type "File1.txt"
Pause&Exit

无论如何,工作目录存储在“% CD%”变量中,而发起 bat 的目录存储在参数0中。然后,如果你想知道任何一台电脑的工作目录,你可以这样做:

@Echo OFF
Echo Launch dir: "%~dp0"
Echo Current dir: "%CD%"
Pause&Exit

ElektroStudios 的回答有点误导人。

“当你启动一个 bat 文件时,工作目录就是它被启动的目录” 如果用户单击资源管理器中的批处理文件,则为。

但是,如果使用 CALL 命令从另一个脚本调用该脚本,则当前工作目录不会更改。

因此,在脚本中,最好使用% ~ dp0subfile file1.txt

还请注意,当当前脚本不在当前工作目录中时,% ~ dp0将以反斜杠结束。 因此,如果您需要不带尾部反斜杠的目录名,可以使用

call :GET_THIS_DIR
echo I am here: %THIS_DIR%
goto :EOF


:GET_THIS_DIR
pushd %~dp0
set THIS_DIR=%CD%
popd
goto :EOF