我有一个批处理文件,我打算将其分发给客户以运行软件任务。
我们将它们作为文件夹或.zip
分发给文件。在里面,有批处理文件和另一个文件夹,其中包含运行批处理所需的文件。
通常,在创建批处理时,键入文件所在的路径。但我不知道文件在哪里。这些文件仍然保存在主文件夹中,但我需要让批处理找到该文件夹来运行文件。
例如:如果他们在桌面上拥有主文件夹并运行它,则需要运行"C:\Users\Username\Desktop"
。您可以将批处理CD放到该位置。
但是如果他们从文件中运行呢?我不知道用户名,所以我必须以某种方式让批处理找到这个。任何代码和/或说明都会很棒。
答案 0 :(得分:82)
无需知道文件的位置,因为当您启动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%”变量中,并且启动bat的目录存储在参数0上。然后,如果您想知道任何计算机上的工作目录,您可以执行以下操作:
@Echo OFF
Echo Launch dir: "%~dp0"
Echo Current dir: "%CD%"
Pause&Exit
答案 1 :(得分:52)
ElektroStudios的回答有点误导。
“当您启动bat文件时,工作目录是启动它的目录” 如果用户单击资源管理器中的批处理文件,则为true。
但是,如果使用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
答案 2 :(得分:43)
您也可以
Pushd "%~dp0"
这也需要考虑从unc路径运行。
答案 3 :(得分:6)
尝试你的补丁
set "batchisin=%~dp0"
应该将变量设置为批次的位置。