Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops DOS批处理-打印文件名(不包括某些扩展名)_Loops_Filenames_Dos - Fatal编程技术网

Loops DOS批处理-打印文件名(不包括某些扩展名)

Loops 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,这意味着您

问题是关于实际的DOS批处理文件,而不是Windows
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
的缩写,它是“文字”、“忽略大小写”、“反向”、“匹配行尾”。因为它是一个文本搜索,而不是正则表达式,而且它必须匹配行尾,所以不需要转义点,它只匹配正确的扩展名。