调用可执行文件在所有文件夹 cmd 或 powershell 中执行命令

Call a executable to execute command in all folders cmd or powershell

我正在对我的工具使用这个 .bat 命令。 rip_images.exe是一个合并图片的工具

rip_images.exe -c 1 00000001.jpg 00000002.jpg 00000003.jpg 00000004.jpg -o out.png
rip_images.exe -c 1 00000001.bmp 00000002.bmp 00000003.bmp 00000004.bmp -o out.bmp

如果我将这些文件放在可执行文件的同一文件夹中,就可以正常工作。

我需要一个在文件夹中搜索 .jpg 和 bmp 并在每个文件夹中执行 .exe 的命令,分别给出每个文件夹中的合并文件。 命令或电源外壳。 我在 powershell

中尝试过类似的东西
Powershell "Get-ChildItem -File -Filter *bmp |ForEach-Object 
{.\rip_image.exe -c 1 $_.FullName}"

但它是逐个文件进行的,需要保存变量之类的东西来放入参数 也许是 /r?

示例:

 rip_images.exe -c 1 var1 var2 var3 var4 -o out.bmp

感谢关注

如果您尝试通过调用 powershell.exe 从 CMD 运行 执行此操作,那么这很可能会失败。但是,您可以将其存储为 .ps1 文件并使用 powershell -File path\to\script.ps1.

您可以使用 Group-Object 按扩展名对文件进行分组,然后将那组对象的 FullName 传递给您的二进制文件:

Get-ChildItem -Directory | ForEach-Object {
    Get-ChildItem $_ -File |
        Where-Object { $_.Extension -in '.bmp', '.png' } |
        Group-Object Extension | ForEach-Object {
            # $_.Name is the extension here
            $folderName = $_.Group.Directory[0]
            .\rip_image.exe -c 1 $_.Group.FullName -o "$folderName out$($_.Name)"
        }
    }