Batch file Dir命令不能按我所希望的那样工作

Batch file Dir命令不能按我所希望的那样工作,batch-file,directory,Batch File,Directory,我应该编写一个批处理文件,该文件将查找以字母a开头,以扩展名.dll结尾的文件 以下是我的想法: @echo off dir /b *.dll C:\windows\system32\ > dll.txt dir /b a* C:\windows\system32\ > a.txt 我的脚本没有按我想要的方式工作,因为它列出了system32目录中的所有文件 有人能帮我按原样修复吗?你可以像这批一样尝试: @echo off Set Log=%~dp0Files_DLL.txt C

我应该编写一个批处理文件,该文件将查找以字母
a
开头,以扩展名
.dll
结尾的文件

以下是我的想法:

@echo off
dir /b *.dll C:\windows\system32\ > dll.txt
dir /b a* C:\windows\system32\ > a.txt
我的脚本没有按我想要的方式工作,因为它列出了
system32
目录中的所有文件


有人能帮我按原样修复吗?

你可以像这批一样尝试:

@echo off
Set Log=%~dp0Files_DLL.txt
CD /D %Windir%\system32\
Dir /b a*.dll>>%Log%
Start "" %Log%

dir/b*.dll C:\windows\system32\
列出与
*.dll
匹配的所有文件,然后列出与
C:\windows\system32\
匹配的所有文件-即该文件夹中的所有文件。正确的语法是:

dir /b "C:\windows\system32\*.dll"
与另一行相同:

dir /b "C:\windows\system32\a*"

命令DIR支持目录列表的多个参数

dir /b *.dll C:\windows\system32\ > dll.txt
此命令行导致写入文件
dll.txt

  • 在当前目录中匹配的所有非隐藏文件和文件夹名通配符模式
    *.dll
  • 目录
    C:\windows\system32\
    中匹配的所有非隐藏文件和文件夹名称默认通配符模式
    *
  • 下一个命令行是:

    dir /b a* C:\windows\system32\ > a.txt
    
    此命令行导致写入文件
    a.txt

  • 所有在当前目录中匹配的非隐藏文件和文件夹名通配符模式a*
  • 目录
    C:\windows\system32\
    中匹配的所有非隐藏文件和文件夹名称默认通配符模式
    *
  • 但最可能需要的是写入目录
    C:\windows\system32\
    中的
    dll.txt
    所有*.dll文件,以及写入目录
    C:\windows\system32\
    中的
    a*
    所有
    a*
    文件,这两次都包括具有隐藏属性集的匹配文件。因此,要使用的命令行是:

    dir %SystemRoot%\System32\*.dll /A-D /B >dll.txt
    dir %SystemRoot%\System32\a* /A-D /B >a.txt
    
    选项
    /A-D
    会禁用目录列表(属性不是目录),同时也会禁用通配符模式并启用隐藏文件列表

    有关命令DIR的帮助,请在命令提示窗口中运行
    DIR/?

    顺便说一句:应该考虑到。由于批处理文件是从32位应用程序中启动的,因此如果批处理文件是由64位Windows上的
    %SystemRoot%\SysWOW64
    中的32位
    cmd.exe
    执行的,则这两条命令行会将
    *.dll
    a*
    目录中的文件输出到文本文件

    下面的批处理文件可用于确保根据Windows体系结构获取Windows系统目录的列表,这在64位Windows上有所不同

    set "SystemFolder=%SystemRoot%\System32"
    if exist "%SystemRoot%\Sysnative\cmd.exe" set "SystemFolder=%SystemRoot%\Sysnative"
    dir %SystemFolder%\*.dll /A-D /B >dll.txt
    dir %SystemFolder%\a* /A-D /B >a.txt
    

    非常特殊的
    %SystemRoot%\Sysnative
    重定向器不适用于64位应用程序,因此也不适用于由目录
    %SystemRoot%\System32\
    中的64位
    cmd.exe执行的批处理文件。请注意,
    Sysnative
    是目录还是符号链接。只能检查
    %SystemRoot%\Sysnative
    中是否存在文件,但无法检查
    %SystemRoot%\Sysnative
    本身是否存在。

    我不敢相信您的代码列出了所有文件。不管怎样,你有没有考虑过模式
    a*.dll
    ?正如我在下面所写的,我表达的是错误的。一个列表应该包含来自system32文件夹的.dll文件,另一个列表应该只包含来自同一目录但以字母a开头的文件。我在表达自己时犯了一个错误。“a.txt”应仅包含以字母a开头的文件名,“dll.txt”应仅包含扩展名为.dll的文件。我刚刚修复了一半,通过添加find命令,至少可以使.dll列表正常工作。现在它看起来像是“dir/b*.dll C:\windows\system32\| find.dll”>dll.txt”。