Windows 在正确目录中的批处理文件中调用批处理文件的命令行

Windows 在正确目录中的批处理文件中调用批处理文件的命令行,windows,batch-file,cmd,Windows,Batch File,Cmd,我在c:\test.bat中有一个批处理文件。此批处理文件中的命令是: C: CALL test.bat 在我的test.bat中,我有: \Tables\batch.bat 命令行调用test.bat很好,但是当它到达命令\Tables\batch.bat时,它会说: 系统找不到指定的路径 如果我将test.bat更改为以下内容,它就可以正常工作: CD Tables CALL batch.bat 但是由于其他原因,我不能更改test.dat。有没有办法调用test.bat并确保我的目录

我在
c:\test.bat
中有一个批处理文件。此批处理文件中的命令是:

C:
CALL test.bat
在我的test.bat中,我有:

\Tables\batch.bat
命令行调用
test.bat
很好,但是当它到达命令
\Tables\batch.bat
时,它会说:

系统找不到指定的路径

如果我将
test.bat
更改为以下内容,它就可以正常工作:

CD Tables
CALL batch.bat

但是由于其他原因,我不能更改test.dat。有没有办法调用
test.bat
并确保我的目录是
Tables
目录
Test.dat
有多个命令,因此对于
\Sprocs\test2.bat
\Tables\batch.bat
表示文件
batch.bat
位于当前驱动器根目录
Tables
的子目录中

\Tables\batch.bat
或just
Tables\batch.bat
表示文件
batch.bat
位于当前目录的子目录
Tables

。\Tables\batch.bat
表示文件
batch.bat
位于当前目录的父目录的子目录
Tables
。换句话说,
是一个与当前目录平行的目录

cd /D "C:\Path\To\Directory"
因此,请遵循的建议,首先删除
\
,以引用当前目录子目录
中的文件
batch.bat

顺便说一下:

C:
将当前驱动器切换到驱动器
C:
。但这并没有定义哪个目录是驱动器
C:
上的当前目录。使用以下命令将特定目录设置为驱动器
C上的当前目录:
独立于当前驱动器和当前目录

cd /D "C:\Path\To\Directory"
如果批处理文件也在运行,并且包含批处理文件的目录应成为当前目录,请使用:

cd /D "%~dp0"


有关这两个命令的详细信息,请打开命令提示窗口,然后从窗口中运行
cd/?
pushd/?
,以获取显示的这两个命令的帮助
call/?
解释
%~dp0
(参数0的驱动器和路径-批处理文件)。

您似乎假设当前目录是根目录。尝试删除\before
。作为测试,添加
ECHO%CD%
作为
test.bat的第一行。感谢您的回复。通过删除“\”可以使它变得更好。虽然下一个批处理文件失败,但命令C:\>sqlcmd-dXXX-UXX-pxxxx-sxxxxx-it\u table.sql-r1sqlcmd:'t\u table.sql':无效文件名。为什么命令
C:\>sqlcmd-dXXX-UXX-Pxxx…
?抱歉,这只是命令提示符下的复制和粘贴
C:\>
是运行命令的路径。感谢您的响应。通过删除“\”可以使它变得更好。尽管下一个批处理文件失败,但命令C:\>sqlcmd-dXXX-UXX-pxxxx-sxxxxx-it\u table.sql-r1sqlcmd:'t\u table.sql':文件名无效。仅供参考:t_table.sql位于Tables子目录下。如果
Tables
中的
batch.bat
希望目录
Tables
是当前目录,则
batch.bat
应该在顶部
pushd“%~dp0”
和底部
popd
中包含。或者运行
sqlcmd
,为所有文件指定完全限定的文件名,即使用
“指向sqlcmd\sqlcmd.exe的路径”-dXXX-UXX-pxxx-sxxxxxxx-i“%~dp0t_table.sql”-r1
。添加“顶部pushd”%~dp0”和底部popd“仍然会给出无效的文件名。看起来系统正在C:中查找文件,但在Tables目录中运行它。因此,您在
test.bat
的顶部添加了
pushd“%~dp0”
,在底部添加了
popd
,并在
test.bat
中使用
call Tables\batch.bat
。是这样吗?
batch.bat
是否希望当前目录是此批处理文件的目录,因为您引用的文件和文件夹没有完整的路径?是的,那么在这个批处理文件中还需要
pushd“%~dp0”
popd
,否则当前目录就是包含
test.bat的
batch.bat
的父目录。顺便说一句:
echo%CD%
put-into-your-batch files让您(通常)看到在处理时执行这一行时的当前目录是什么。