2012-03-06 117 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