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
或justTables\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让您(通常)看到在处理时执行这一行时的当前目录是什么。