在Microsoft cmd.exe中使用for循环,我如何处理只有特定扩展名的文件?

我有一个文件夹c:\test\和其中的两个文件a.txtb.txtv

我只想处理扩展名等于.txt的文件。

如果我写这个命令

 cd c:\test for %f in (*.txt) do echo %f 

我将在列出a.txtb.txtv地方得到结果。

同样的情况发生

 cd c:\test dir *.txt 

看来.txt.txtv是一样的。

我有意大利语Windows XP SP3的结果

 ver 

Microsoft Windows XP [Versione 5.1.2600]

Windows 7的英文版Microsoft Windows XP [Version 6.1.7601]

 for %%I in (*.*) do if "%%~xI"==".txt" (echo %%I) 

这应该做到这一点。

编辑:这是“脚本”的语法。 如果你想在命令行键入这个,你必须每次删除一个%符号,这样做:

 for %I in (*.*) do if "%~xI"==".txt" (echo %I) 

尝试使用forfiles代替。 对于扩展返回的内容似乎更具限制性,另外它还具有内置for循环的附加好处。 应该已经在Win7盒子上,但是你可能需要在XP盒子上安装一个2003 Server资源工具包来获取它。

在PowerShell中非常简单,并且可以正常工作:

 PS C:\Users\bpabst\Desktop> ls *.txt Directory: C:\Users\bpabst\Desktop Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 7/2/2012 11:19 AM 11 test.txt