Script that pass file names as arguments to function
我有一个名为threshold的程序。我在一个名为images的目录中有一组映像。
1 2 3 4 5 6 7 8
| |-- images
| -----img_1.jpg
| -----img_2.jpg
| -----img_3.jpg
| ------
| ------img_n.jpeg
|-- threshold.exe
|-- myscript |
如何编写bash脚本,以便它接受目录名作为参数,并将目录中的每个文件单独作为参数传递给程序threshold.exe。
如果我执行,
最后的执行应该是这样的。
./threshold.exe img_1.jpg./threshold.exe img_2.jpg........./threshold.exe img_n.jpg
- 你自己试过什么/
- 运行时,批处理文件将具有"内部"变量。假设一个批处理文件"doit.bat"。像这样的调用doit.bat"c:\folder path\to\wherever"将把"c:\folder path\to\wherever"参数存放到变量%1中。因此,您将查询%1的文件列表,并将每个文件传递给threshold @file。对于文件/批处理参数,请尽情享受。尝试一下,发布你的代码,我们会帮助你进一步发展。不过,你在窗户里吗?
- 类似于"for%%i in(path to directory *.jpg)do threshold.exe%%i"这样的操作应该有效。
- 顺便说一句,./threshold img_1.jpg不起作用,因为threshold在父目录中,而不是当前目录中。你要的要么是./threshold images/img_1.jpg,要么是相当于../threshold img_1.jpg。
- 在未来,顺便说一句,尝试遵循stackoverflow.com/help/mcve——发布一个问题,不仅描述了您想要做什么,还描述了您尝试过什么,它是如何失败的,以及导致相同失败的最短代码量,这样就可以让其他人(而不仅仅是您)运行它并看到相同的结果。
假设您在Windows环境中。
1
| forfiles /p %1 /m *.jpg /c"cmd /c threshold.exe @file" |
-对于路径(/p中的每个文件)%1
-其中%1是传递的参数,即要搜索的文件夹
-运行命令(/ccmd /c threshold.exe @file)
-其中@file表示JPG文件的路径
- 鉴于OP提出的是"bash"问题而不是"batch"问题,并使用./启动他们的程序,这看起来不像是一个安全的假设。
- (…虽然.exe扩展有点冲突,但这不是一件确定的事情——在unixen或pe文件上运行mono的clr可执行文件在wine运行时仍然安装了完整的扩展)。
- @Charlesduffy,基于相同的队列,我也很确定他没有运行windows。希望这些信息仍然有帮助,他或寻找类似答案的人。
1 2 3 4 5 6
| #!/bin/bash
for dir; do
for f in"$dir"/*; do
./threshold.exe"$f"
done
done |
其行为如下:
- 首先,迭代命令行参数,将每个参数视为一个目录。
- 接下来,迭代当前目录中的文件
- 然后,调用每个文件的可执行文件
请注意,这将是./threshold.exe images/img_1.jpg的形式,而不是./threshold img_1.jpg的形式——这是必要的,以便我们从实际包含threshold.exe的目录运行./threshold.exe,并且仍然提供有效的文件相对路径。