Loops DOS批处理-打印文件名(不包括某些扩展名)
问题是关于实际的DOS批处理文件,而不是WindowsLoops DOS批处理-打印文件名(不包括某些扩展名),loops,filenames,dos,Loops,Filenames,Dos,问题是关于实际的DOS批处理文件,而不是Windowscmd.exe脚本文件 如何在for循环中排除具有特定扩展名的文件 @echo off set myExtension= for /r C:\ %%i in (*) do ( ::notDesirableExtension if myExtension != gif or jpg ... echo myFiles >> F:\list.txt ) 由于您可以访问FOR/R,这意味着您
cmd.exe
脚本文件
如何在for
循环中排除具有特定扩展名的文件
@echo off
set myExtension=
for /r C:\ %%i in (*) do (
::notDesirableExtension
if myExtension != gif or jpg
...
echo myFiles >> F:\list.txt
)
由于您可以访问FOR/R,这意味着您可以访问命令扩展。所以答案是微不足道的
@echo off
for /r C:\ %%i in (*) do (
if "%%~xi" neq ".jpg" if "%%~xi" neq ".gif" >>F:\list.txt echo %%i
)
但根本没有理由使用FOR循环,因为您还应该有权访问FINDSTR。这个FINDSTR解决方案应该快得多。而且不需要批处理文件。它在命令行上运行良好
dir /s /b /a-d-h-s | findstr /live ".jpg .gif" >F:\list.txt
直到Windows 2000才引入命令扩展,这不是真正的DOS。您的问题是关于实际的DOS(
Command.com
)批处理文件,还是关于Windows命令处理器(cmd.exe
)脚本文件?在语法和功能上存在着很大的差异,这种差异很重要。(你的问题标题是Windows
和DOS
)我的问题是关于DOS(command.com)批处理文件的。我进行了编辑以表明这一点,并更清楚地提出这个问题。仅供参考,我不认为DOS下的注释支持:
;IIRC,那只是当时的REM。还有,可能会有帮助;这是关于删除所有,除了那些有一定扩展,但想法是一样的。谢谢肯,但上面的链接没有帮助。我试图将循环中的myExtension变量设置为扩展字符串,然后打印文件名减去不需要的扩展名。在什么方面没有帮助?在执行echo
之前,您可以使用多个attrib
命令,并且您没有指出myFiles
应该包含哪些内容。我不清楚你在这里想干什么。(循环不是必需的。隐藏不需要的扩展名,执行dir>F:\list.txt
,并重置属性以取消隐藏文件。)看起来您应该使用\symbol像这样的findstr/live“\.jpg\.gif”来转义搜索条件中的点,或者它将为expample“asa\u jpgd.doc”查找这样的文件,顺便问一下,什么是/live开关?@qwebek-/live
是/L/I/V/E
的缩写,它是“文字”、“忽略大小写”、“反向”、“匹配行尾”。因为它是一个文本搜索,而不是正则表达式,而且它必须匹配行尾,所以不需要转义点,它只匹配正确的扩展名。