2012-03-06 115 views
0

在Windows CMD批次, 我嘗試調用批處理文件:failture在CMD批處理文件

call ".\%%R\scenery\list bgl.bat" ".\%%R\scenery\" 

在 「列表bgl.bat」 我有:

IF "%1"=="" (dir *.bgl /b > list_bgl.txt) ELSE (dir "%1*.bgl" /b > list_bgl.txt) 

和崩潰某處在條件的地方。 if true部分工作正常(如果我直接運行批處理「list bgl.bat」)。但是如果我從一個批處理文件運行它,所以else塊失敗並且腳本崩潰。看看問題在哪裏?

更新:

T:\test\scenery>call ".\list bgl.bat" 
T:\test\scenery>IF "" == "" (dir *.bgl /b 1>list_bgl.txt) ELSE (dir "*.bgl" /b 1>list_bgl.txt) 
T:\test\scenery>ECHO DONE 
DONE 

T:\test\scenery>pause 
Press any key to continue 

T:\test\scenery>call ".\list bgl.bat" ".\" 
T:\test\scenery>IF ".\" == "" 
(dir *.bgl /b 1>list_bgl.txt) ELSE (dir ".\*.bgl" /b 1>list_bgl.txt) 
T:\test\scenery>ECHO DONE 
DONE 

T:\test\scenery>pause 
Press any key to continue 
T:\test\scenery> 

那麼這個工程。命令參數號。 1,從CMD-線測試

EDIT2: 當我調用主批(從父目錄)我認爲沒有錯誤,但未在指定的目錄,但在主目錄從其中主創建的文件運行進行:

@echo off 
cls 
for /F "tokens=*" %%R in ('dir * /A:D /b') do (
echo ".\%%R\scenery\list bgl.bat" 
call ".\%%R\scenery\list bgl.bat" ".\%%R\scenery\" 
) 
pause 

EDIT3: 是的,我有。問題就在這裏:

> list_bgl.txt 

我想念那裏的路...這工作:

IF "%~1"=="" (dir *.bgl /b > list_bgl.txt) ELSE (dir "%~1*.bgl" /b > "%~1list_bgl.txt") 
+0

如果使用參數運行「list bgl.bat」會怎麼樣?比如:''list bgl.bat「」dummy parameter「' – vulkanino 2012-03-06 14:50:51

+0

嗯,我試着更新我的文章。見上面 – user1141649 2012-03-06 16:45:43

+1

您是否意識到''。\ %% R \ scenery \「路徑與'」%% R \ scenery \「'完全相同?點的意思是「當前目錄」所以「。\ Anydir」是當前目錄下面的Anydir ... – Aacini 2012-03-07 05:22:30

回答

4

您在通話過程中已經放入引號內的參數,則中添加第二組引號「列表bgl.bat「。這可能會導致問題。如果要在「list bgl.bat」中添加括起的引號,則需要先使用%~1刪除任何可能的現有封閉引號。

IF "%~1"=="" (dir *.bgl /b > list_bgl.txt) ELSE (dir "%~1*.bgl" /b > list_bgl.txt) 

更新
,你們充分展示了什麼工作的例子,但我們需要看到什麼是不工作的。 quote /%〜問題是真實的,但看起來你有其他問題。我很好奇%% R的運行時間值是多少?我也很驚訝你的調用批處理文件的路徑可能會有所不同。

+0

哦,你說得對! – Benoit 2012-03-06 15:03:20

+0

謝謝,但仍然無法正常工作。雖然我添加了〜字符.... – user1141649 2012-03-06 16:32:44

+0

我做了測試並更新了這篇文章。 – user1141649 2012-03-06 16:49:25