2016-03-04 62 views
-1

我在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具有多于一个的命令,所以有装置的文件batch.bat处于子目录Tables根电流驱动中的另一个为\Sprocs\test2.bat

+0

创建符号链接 – Marged

+0

看起来您假定当前目录是根目录。尝试在“表”之前删除\。作为一个测试,添加'ECHO%CD%'作为'test.bat'的第一行。 – lit

+0

@Liturgist感谢您的回复。通过删除“\”它使它更好。尽管下一个批处理文件未能执行以下命令:C:\> sqlcmd -dXXX -UXX -Pxxxxxx -Sxxxxxxxx -it_table.sql -r1 Sqlcmd:'t_table.sql':文件名无效。 –

回答

0

\Tables\batch.bat

.\Tables\batch.bat或只是Tables\batch.bat手段文件batch.bat在子目录当前目录Tables

..\Tables\batch.bat意味着文件batch.bat处于子目录当前目录的父目录的Tables。换句话说,Tables是一个与当前目录并行的目录。

因此遵循Liturgist的建议,并删除第一\引用文件batch.bat在子目录Tables当前目录

顺便说一句:

C:切换电流驱动来驱动C:。但是这并没有定义哪个目录是驱动器C:上的当前目录。使用以下命令将驱动器C:上的当前目录作为特定目录,与当前驱动器和当前目录的内容无关。

cd /D "C:\Path\To\Directory" 

在批处理文件的情况下也运行和含有批处理文件中的目录应该成为当前目录,使用:

cd /D "%~dp0" 

pushd "%~dp0" 

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

+0

感谢您的回复。通过删除“\”它使它更好。尽管下一个批处理文件未能执行以下命令:C:\> sqlcmd -dXXX -UXX -Pxxxxxx -Sxxxxxxxx -it_table.sql -r1 Sqlcmd:'t_table.sql':文件名无效。仅供参考:t_table.sql位于Tables子目录下。 –

+0

那么,如果'Tables'中的'batch.bat'需要'Tables'目录是当前目录,'batch.bat'应该包含顶部'pushd'%〜dp0''和底部'popd'。或者你运行'sqlcmd'并为所有文件指定完全限定的文件名,即使用类似''SqlCmd \ sqlcmd.exe的路径“-dXXX -UXX -Pxxxxxx -Sxxxxxxxx -i”%〜dp0t_table.sql“-r1' 。 – Mofi

+0

添加“顶部推送”%〜dp0“底部popd”仍然给我无效的文件名。它看起来像系统正在C中寻找一个文件,但在Tables目录中运行它。 –

相关问题