【问题标题】:"C:\Users\root\Desktop\%%I" add variable folders to command"C:\Users\root\Desktop\%%I" 将变量文件夹添加到命令
【发布时间】:2019-07-11 20:40:43
【问题描述】:

我有一个简单的,我使用 FrameShots 软件从多个视频文件中抓取图像。

FOR /F %%I IN ('dir *.mp4 *.mkv /b /s') DO "C:\Program Files (x86)\FrameShots\frameshots.exe" -count 10 -filetype .jpeg "C:\Users\me\Videos\%%I" "C:\Users\me\Images"

从我的视频文件夹中的每个视频文件中抓取图像效果很好,但我无法访问视频文件夹中子文件夹中的视频(这是我认为/s 应该实现的)。

我希望在命令中输入/s 会强制 FrameShots 不仅检查视频文件夹中的视频文件,还检查视频文件夹内其他文件夹(即假期文件夹、工作文件夹、儿童文件夹)中的视频...) 但是我错了。

这是一个非常基本的bat文件:

FOR /F %%I IN ('dir *.mp4 *.mkv /b /s') DO "C:\Program Files (x86)\FrameShots\frameshots.exe" -count 10 -filetype .jpeg "C:\Users\me\Videos\%%I" "C:\Users\me\Images"

我希望从“视频”文件夹中的每个视频(包括子文件夹)中获取 10 张 jpeg 图像,但我目前仅从不在子文件夹中但我想从中获取图像的 mp4/mkv 文件中获取图像'Videos' 文件夹中的每个 mp4/mkv 文件,包括所有子文件夹。

【问题讨论】:

  • 已解决,谢谢 Personick 先生!
  • 如果答案解决了您的问题,请点击旁边的绿色复选标记;阅读this help article 了解为什么这很重要;谢谢!

标签: batch-file image file batch-file video directory


【解决方案1】:

看看这是否对你有用:

FOR /F "Tokens=*" %%I IN ('dir "%UserProfile%\*.mp4" "%UserProfile%\*.mkv" /b /s') DO "%ProgramFiles(x86)%\FrameShots\frameshots.exe" -count 10 -filetype .jpeg "%%I" "%USERPROFILE%\Images"

使用 DIR 和 /S 将递归子目录,但输出将是匹配文件的完整路径,而不是相对路径或文件名。

因此我们可以忽略你已经填写了一些文件路径的部分。

此外,由于我知道您想在您的用户配置文件下进行搜索,因此我改为使用 Windows 变量并使用它来明确确保搜索在正确的位置进行,并且我也将其用于输出确保所有照片都生成在您的图像文件夹中。

所以现在它可以在任何安装了该程序的计算机上运行,​​而不仅仅是您的特定计算机。 :)

【讨论】:

  • 我只对你的脚本做了一些小改动,现在它对我来说非常有效: FOR /F "Tokens=*" %%I IN ('dir *.mp4 *.mkv /b / s') DO "C:\Program Files (x86)\FrameShots\frameshots.exe" -count 10 -filetype .jpg %%I "D:\Images" 再次感谢您!
【解决方案2】:

如果你想遍历一个目录中的所有文件(包括子文件夹)for /r 是要走的路:

@echo off

set "dir=C:\Your\Video\Directory"
set "frame=C:\Program Files (x86)\FrameShots"
set "me=C:\Users\me"

for /r "%dir%" %%A in (*.mp4 *.mkv) do (
    "%frame%\frameshots.exe" -count 10 -filetype .jpeg "%%A" "%me%\Images"

)

我设置了比必要更多的变量,以便在代码块中更容易阅读 - 如果您喜欢循环中的完整路径,您可以设置更少/无。 for /r 将遍历视频目录 (dir) 中的所有 .mp4 和 .mkv 文件,将每个文件设置为参数 %%A,然后在 frameshots.exe 命令行中使用该参数。不需要循环遍历dir 的输出。

我不熟悉 FrameShots,所以我只是根据您在问题中给出的示例以及我猜测它们需要更正的示例来构建语法 - 本质上,当循环迭代时,该行将像这样读取:

"C:\Program Files (x86)\FrameShots\frameshots.exe" -count 10 -filetype .jpeg C:\Full\Path\Of\Video\File.extension" "C:\Users\me\Images"

参考:For

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-05
    相关资源
    最近更新 更多