为什么第一个例子有效但第二个例子没有?

时间:2014-02-24 01:21:03

标签: batch-file

示例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 个答案:

答案 0 :(得分: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命令,它不将空格视为分隔符,因此您的第一个示例工作的事实是一种意外。