2012-10-26 269 views
0

好吧我已經找到了一些關於此問題的問題,但每個都說確保在第二個bat文件中使用CALLexit \bgoto eof但由於某種原因,我沒有得到這個工作,我曾經嘗試都,批處理文件執行第一次調用語句後退出每次:從另一個批處理腳本調用批處理腳本

批處理文件1(myscript.bat):

:@echo off 
del files 
dir /B /O-D | find "test2" > tmp 
dir /B /O-D | find "test3" > tmp2 
CALL head 1 tmp > files 
CALL head 1 tmp2 >> files 

head.bat:

@echo off 

if [%1] == [] goto usage 
if [%2] == [] goto usage 

call :print_head %1 %2 
goto :eof 

REM 
REM print_head 
REM Prints the first non-blank %1 lines in the file %2. 
REM 
:print_head 
setlocal EnableDelayedExpansion 
set /a counter=0 

for /f ^"usebackq^ eol^=^ 

^ delims^=^" %%a in (%2) do (
     if "!counter!"=="%1" goto :eof 
     echo %%a 
     set /a counter+=1 
) 

goto :eof 

:usage 
echo Usage: head.bat COUNT FILENAME 

執行:

C:\用戶\ OTS> myscript.bat

C:\用戶\ OTS>德爾文件

C:\用戶\ OTS> DIR/B/OD |找到「test2」1> tmp

C:\ Users \ ots> dir/B/O-D |找到 「TEST3」 1> TMP2

C:\用戶\ OTS> CALL頭1 TMP 1>文件

C:\用戶\ OTS>

我怎樣才能得到它運行第二個「tmp2」呼叫線?

謝謝!

回答

3

你的代碼沒問題,兩次調用都確實發生了。

問題是您在head.bat中將echo設置爲OFF,所以在第一次調用後,您的命令沒有在控制檯上得到回顯,但這並不意味着該文件未被調用。

要驗證這一點,請從head.bat中刪除@echo off,然後您將看到第二個CALL命令。

+0

你是對的!謝謝! –