如何修改此Windows脚本以进行匹配?

时间:2016-01-20 18:45:42

标签: windows batch-file cmd ffmpeg

ffmpeg可以调整视频/图像文件的大小..首先是input_file ..参数.. output_file ..

ffmpeg -i input.avi -vf scale=320:240 output.avi

ffmpeg -i 20140724_071746.mp4 -vf scale=640:-1 20140724_071746_LOW_640.mp4

此处有更多信息:https://trac.ffmpeg.org/wiki/Scaling%20%28resizing%29%20with%20ffmpeg

我希望它缩小我的microSD卡上的所有视频以创建空间(我有原件备份)

所以我希望它能在一夜之间抛出所有子目录中的所有文件并调整所有文件的大小。有可能脚本可能会停止或崩溃,我需要再次运行它,或者如果我添加新文件,我会想再次运行它。

所以我希望它跳过处理所有已处理的文件及其调整大小的版本。

在我的情况下,如果FILE_NAME.mp4也有FILE_NAME_LOW_640.mp4 SKIP它 和 如果FILE_NAME_LOW_640.mp4*640跳过它

到目前为止,这是我的Windows批处理脚本

REM @echo off
REM just save as "DOS"
REM cd /d C:\s

setlocal enabledelayedexpansion
for %%j in (*.mp4) do (
set filename=%%~nj
echo %%j

ffmpeg -i %%j -vf scale=640:-1 %%j_LOW_640.mp4

REM but now I want to add the two checks to skip files that have been resized .. or if they are the resized version 

REM if not "!filename!"=="%%j_LOW_640.mp4" AND IF FILE !COINTAIN *640* THEN ffmpeg -i %%j -vf scale=640:-1 %%j_LOW_640.mp4

)

pause
REM AND I would also want it to process all the sub-directories  

换句话说,我的帮助问题是:

  1. 如果字符串包含字符串匹配,如何检查字符串?

  2. 如何让我的脚本也处理所有子目录?

2 个答案:

答案 0 :(得分:0)

for /f "delims=" %A in ('dir /b /s c:\somewhere\*.mp4') do (findstr /c:"_640" %A  || Echo ffeg etc %A)

||表示如果findstr返回错误级别不为0,则运行命令,如果找不到该字符串,则返回错误级别。 /s中的dir会执行子文件夹。

批量使用%%A,输入时使用%A

请参阅Novice Batch Issue- Creating Files以获取命令标点符号列表。

一个vbs脚本走在树上。在命令提示符cscript //nologo "c:\some path\script.vbs"中使用cscript运行它。更改计算机的起始文件夹(替换c:\users\david candy\documents)。

On Error Resume Next

Set fso = CreateObject("Scripting.FileSystemObject")

ProcessFolder "c:\users\david candy\documents"

Sub ProcessFolder(FolderPath)

    Set fldr = fso.GetFolder(FolderPath)

    Set Fls = fldr.files

    For Each thing in Fls

        wscript.echo thing.name

    Next

    Set fldrs = fldr.subfolders

    For Each thing in fldrs

        wscript.echo thing.name

        ProcessFolder thing.path

    Next

End Sub

答案 1 :(得分:0)

我希望这个方法足够简单,所以不需要解释。您可以在HELP FOR

阅读有关FOR参数修饰符的更多详细信息
@echo off
setlocal EnableDelayedExpansion

for /F "delims=" %%a in ('dir /S /B *.mp4') do (
   set "name=%%~Na"
   if "!name:~-3!" neq "640" if not exist "%%~DPNa_LOW_640.mp4" (
      ffmpeg -i "%%a" -vf scale=640:-1 "%%~DPNa_LOW_640.mp4"
   )
)