如何查找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设置到你的批处理位置。