如何查找batch file的当前目录,然后将其用于path?

我有一个batch file,我打算分发给我们的客户来运行一个软件任务。

我们将它们作为一个文件夹或与.zip里面的文件分发。 里面有batch file和另一个文件夹以及运行批处理所需的文件。

通常,当您进行批量处理时,请键入文件所在的path。 但是我不知道这些文件在哪里。 这些文件仍然保留在主文件夹内,但是我需要batch filefind该文件夹​​。

举个例子:如果他们有桌面上的主文件夹,他们运行它,它将需要像"C:\Users\Username\Desktop"运行。 您将有批处理CD到那个位置。

但是如果他们从文档中运行呢? 我不知道用户名,所以我不得不以某种方式批量find这个。 任何代码和/或指示将是伟大的。

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

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

而用户启动“mybat.bat”,工作目录是“。\ mydocuments \ folder”,所以你只需要在你的脚本中写下子文件夹的名字:

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

无论如何,工作目录存储在“%CD%”variables中,启动蝙蝠的目录存储在参数0中。然后,如果您想知道任何计算机上的工作目录,可以执行以下操作:

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

ElektroStudios的答案有点误导。

“当你启动一个bat文件时,工作目录是它启动的目录”如果用户点击资源pipe理器中的batch file,情况就是这样。

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

因此,在您的脚本中,最好使用%〜dp0subfolder \ 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 

你也可以做

  Pushd "%~dp0" 

这也需要考虑到一条不起眼的path。

尝试在你的批次

 set "batchisin=%~dp0" 

这应该把variables设置到你的批处理位置。