【问题标题】:match all files in current directory匹配当前目录中的所有文件
【发布时间】:2011-03-07 07:17:21
【问题描述】:

如何在 Windows 中使用命令提示符或 PowerShell 实现此目的?

myprog *

编辑:我想用当前目录中的每个文件作为参数调用 myprog。

【问题讨论】:

    标签: command-line powershell cmd


    【解决方案1】:

    如果您的目标是为目录中的每个文件调用“myprog.exe”,假设“myprog.exe”本身不处理通配符,那么它应该类似于 powershell 中的内容:

    dir | % {prog $_.FullName} 
    

    编辑:考虑您的评论,试试这个:

    prog (get-childItem -name)
    

    希望对你有帮助...

    【讨论】:

    • 我只想运行一个带有多个参数的 myprog 实例,每个参数对应于当前目录中的一个文件。例如:在 unix 中,'myprog *' 将扩展为 'myprog a.txt g.txt p.txt' ..etc
    【解决方案2】:

    我将 Cédric Rup 的解决方案封装在一个函数 ea(ExpandAll?)中。虽然不如 Unix 方法干净。

    function ea ($p="*") { dir $p | foreach { '"{0}" ' -f $_.Name } }
    
    .\Myprog.exe (ea)
    .\Myprog.exe (ea *)
    .\Myprog.exe (ea *.txt)
    

    【讨论】:

    • 事实上,没有必要保护文件名中的空格......所以一个简单的 get-childItem -name 就可以了
    【解决方案3】:

    在 .CMD 或 .BAT 文件中:

    SETLOCAL EnableDelayedExpansion
    FOR %%f in (*) DO SET params=!params! "%%f"
    CALL myprog %params%
    

    SETLOCAL EnableDelayedExpansion!variable! 语法允许您累积结果。 (有关说明和示例,请参阅this page。)

    编辑:在 %%f 周围添加引号,并将列表更改为 '*'...见下面的 cmets。

    【讨论】:

    • +1 但你应该用双引号将!params! 括起来以防止文件名中出现空格
    • @Frank:一点也不。您应该将%%f 放入引号中。 """"1.txt" 2.txt" 3.txt" 4.txt" 5.txt 的文件列表会有点奇怪。 ewall:使用* 作为通配符就足够了。
    • @Johannes 我留在 . 中作为避免列出子目录的一种简单方法......但我应该提到文件名具有 .扩展和子文件夹没有。谢谢!
    • @Johannes:谢谢,这就是我的意思,但有时事情会在我脑海中扭曲
    【解决方案4】:

    您的意思是命令外壳(cmd.exe)中的以下构造:

    for %f IN (*.*) DO echo %f
    

    【讨论】:

    • 我想以当前目录中的每个文件作为参数调用 myprog。
    猜你喜欢
    • 2014-10-01
    • 2021-09-27
    • 1970-01-01
    • 2019-01-04
    • 2010-10-07
    • 2012-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多