首先,我看到this topic,但我无法理解。获取当前批文件目录
问:
有在D:\path\to\file.bat
一个批处理文件内容如下:
echo %cd%
pause
输出是:
C:\
它必须是D:\path\to
我究竟做错了什么?
首先,我看到this topic,但我无法理解。获取当前批文件目录
问:
有在D:\path\to\file.bat
一个批处理文件内容如下:
echo %cd%
pause
输出是:
C:\
它必须是D:\path\to
我究竟做错了什么?
系统只读变量%CD%
保留批处理调用程序的路径,而不是批处理文件位置。
您可以获得用户键入的批处理脚本名称%0
(例如scripts\mybatch.bat
)。 Parameter extensions可应用于此,因此%~dp0
将返回批处理脚本的驱动器和路径(例如W:\scripts\
),并且%~f0
将返回完整路径名称(例如W:\scripts\mybatch.cmd
)。
您可以通过使用此语法引用其他文件在同一文件夹作为批处理脚本:
CALL %0\..\SecondBatch.cmd
这甚至可以在一个子程序中使用,Echo %0
会给呼叫标签,但是,echo "%~nx0"
会给你是批处理脚本的文件名。
当%0
变量被展开时,结果被括在引号中。
看,我不需要在'D:\ Dir1 \ Dir2 \ stm.sql'中运行'stm.sql'。我需要'mysql.exe -u root -p mysql <%cd%\ stm.sql'来执行那个stm.sql命令。 –
@HamedKamrava是我的SQL批处理?不是像'*一样的批处理文件。蝙蝠或'* .sh'? – Stoleg
@ Stoleg-事实上,'D:\ Dir1 \ Dir2 \ batchfile.bat'和'D:\ Dir1 \ Dir2 \ stm.sql'中有2个文件。 batchfile.bat的内容是:'mysql.exe -u root -p mysql
很简单:
setlocal
cd /d %~dp0
File.exe
代码很简短,但它不易理解。什么是File.exe?当前目录路径是否存储在%〜dp0中? –
@IvailoBardarov这里是答案:https://stackoverflow.com/a/18310141/5259296 –
这个答案实际上回答了这个问题,我想。荣誉。 – macetw
在你的.bat文件:
set mypath=%cd%
现在,您可以使用变量%mypath%
以参考.bat
文件的文件路径。要确认路径是正确的:
@echo %mypath%
例如,一个名为DIR.bat
具有以下内容
set mypath=%cd%
@echo %mypath%
Pause
运行从目录g:\test\bat
回音必在DOS命令窗口路径。
这是最好最简单的解决方案 – Nani
您应该阅读所有问题的答案,特别是较高的投票获得者,而不仅仅是接受的答案。您发布的链接中得分最高的答案已经可以解答您的问题。 – dbenham
如果您在c:\中输入批处理文件名称,那么c:\是%cd%将要打印的内容。 – foxidrive