2014-02-24 90 views
-1

实施例1:为什么第一个例子工作,但第二个例子不工作?

@echo off 
cd G:\Games\Console\ROMS\MAME\Games\1P\1P Breakout\ 
for %%f in (*.zip) do echo %%~nf 

实施例2:

@echo off 
for %%f in (G:\Games\Console\ROMS\MAME\Games\1P\1P Breakout\*.zip) do echo %%~nf 
+1

尝试引用路径,因为它有空格:''G:\ Games \ Console \ ROMS \ MAME \ Games \ 1P \ 1P Breakout \ *。zip“' – Blorgbeard

+0

是的,命令'CD'是一个例外它不会将空格视为分隔符。 – mbroshi

回答

0

for环路括号内是一个空间分隔的集,其支持通配符。在第一个示例中,通配符表达式(*.zip)扩展为给出集合(a.zip b.zip c.zip ...)for循环遍历该集合。

在第二个示例中,您设置的元素为:G:\Games\Console\ROMS\MAME\Games\1P\1PBreakout\*.zip。据推测,这给出了一个单元集,因为Breakout\*.zip中的通配符可能扩展为空集。

为了解决这个问题,你需要添加引号:

for %%f in ("G:\Games\Console\ROMS\MAME\Games\1P\1P Breakout\*.zip") do echo %%~nf 

注意,在一般情况下,你需要在批量空间周围添加文件路径引号。极少数例外之一是CD命令,该命令不会将空格视为分隔符,因此,您的第一个示例工作的事实就是偶然事件。

相关问题