2016-03-04 61 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目錄中運行它。 –

相關問題