2013-06-12 200 views
189

首先,我看到this topic,但我无法理解。获取当前批文件目录

问:

有在D:\path\to\file.bat一个批处理文件内容如下:

echo %cd% 
pause 

输出是:

C:\ 

它必须是D:\path\to

我究竟做错了什么?

+5

您应该阅读所有问题的答案,特别是较高的投票获得者,而不仅仅是接受的答案。您发布的链接中得分最高的答案已经可以解答您的问题。 – dbenham

+4

如果您在c:\中输入批处理文件名称,那么c:\是%cd%将要打印的内容。 – foxidrive

回答

373

系统只读变量%CD%保留批处理调用程序的路径,而不是批处理文件位置。

您可以获得用户键入的批处理脚本名称%0(例如scripts\mybatch.bat)。 Parameter extensions可应用于此,因此%~dp0将返回批处理脚本的驱动器和路径(例如W:\scripts\),并且%~f0将返回完整路径名称(例如W:\scripts\mybatch.cmd)。

您可以通过使用此语法引用其他文件在同一文件夹作为批处理脚本:

CALL %0\..\SecondBatch.cmd 

这甚至可以在一个子程序中使用,Echo %0会给呼叫标签,但是,echo "%~nx0"会给你是批处理脚本的文件名。

%0变量被展开时,结果被括在引号中。

More on batch parameters

+1

看,我不需要在'D:\ Dir1 \ Dir2 \ stm.sql'中运行'stm.sql'。我需要'mysql.exe -u root -p mysql <%cd%\ stm.sql'来执行那个stm.sql命令。 –

+0

@HamedKamrava是我的SQL批处理?不是像'*一样的批处理文件。蝙蝠或'* .sh'? – Stoleg

+0

@ Stoleg-事实上,'D:\ Dir1 \ Dir2 \ batchfile.bat'和'D:\ Dir1 \ Dir2 \ stm.sql'中有2个文件。 batchfile.bat的内容是:'mysql.exe -u root -p mysql

77

很简单:

setlocal 
cd /d %~dp0 
File.exe 
+5

代码很简短,但它不易理解。什么是File.exe?当前目录路径是否存储在%〜dp0中? –

+1

@IvailoBardarov这里是答案:https://stackoverflow.com/a/18310141/5259296 –

+0

这个答案实际上回答了这个问题,我想。荣誉。 – macetw

14

在你的.bat文件:

set mypath=%cd% 

现在,您可以使用变量%mypath%以参考.bat文件的文件路径。要确认路径是正确的:

@echo %mypath% 

例如,一个名为DIR.bat具有以下内容

set mypath=%cd% 
@echo %mypath% 
Pause 

运行从目录g:\test\bat回音必在DOS命令窗口路径。

+0

这是最好最简单的解决方案 – Nani