gpt4 book ai didi

batch-file - 批处理脚本调用自己的名称而不是某种类型的文件?

转载 作者:行者123 更新时间:2023-12-04 23:14:23 25 4
gpt4 key购买 nike

cd %cd%
ffmpeg -i %cd%/%04d.png out.mp4

仅包含此内容的脚本可以正常工作,并且可以准确输出我需要的内容,但是:
:: A simple script to convert a png or jpg image sequence to an         
mp4 file with ffmpeg
cls
@echo off
title PNG2MP4
color C
echo Ensure you have ffmpeg installed and setup in your environment variables or this script won't work.


:QUERY
echo This will convert all image files in the following directory to a single mp4,
echo %cd%
echo are the files PNGs or JPEGs(PNG/P/JPG/J/CANCEL)?
set/p "ch=>"
if /I %ch%==PNG goto CONVERTPNG
if /I %ch%==P goto CONVERTPNG
if /I %ch%==JPG goto CONVERTJPG
if /I %ch%==J goto CONVERTJPG
if /I %ch%==CANCEL goto :eof
echo Invalid choice & goto QUERY

:CONVERTPNG
cd %cd%
ffmpeg -i %cd%/%04d.png out.mp4

:CONVERTJPG
cd %cd%
ffmpeg -i %cd%/%04d.jpg out.mp4

这个更复杂的脚本版本失败,输出:
C:\tmp/img2mp4.bat4d.jpg: No such file or directory

为什么它不再调用它以前所做的文件,并且有一个简单的解决方法吗?

最佳答案

这是我对批处理文件的建议:

@echo off
rem A simple script to convert a png or jpg image sequence to an mp4 file with ffmpeg
cls
title PNG2MP4
color C
echo Ensure you have ffmpeg installed and setup in your environment variables
echo or this script won't work.
echo/
echo This will convert all image files in the following directory to a single mp4:
echo/
echo %cd%
echo/
%SystemRoot%\System32\choice.exe /C PJC /N /M "Are the files PNGs or JPEGs or Cancel (P/J/C)? "
if errorlevel 3 color & goto :EOF
echo/
if errorlevel 2 (
ffmpeg.exe -i %%04d.jpg out.mp4
) else (
ffmpeg.exe -i %%04d.png out.mp4
)
color
字符 % 必须在批处理文件中进行转义,再使用一个 % 被解释为文字字符,这是导致批处理文件无法按预期工作的主要问题。 %0 引用用于启动批处理文件的字符串 img2mp4.bat 。所以 %04d.jpgimg2mp4.bat4d.jpg 连接起来,结果是以 ffmpeg.exe 作为文件名而不是参数字符串 img2mp4.bat4d.jpg 运行 %04d.jpg
要引用当前目录中的一个或多个文件/文件夹,可以在脚本或应用程序的参数列表中简单地指定文件/文件夹,而无需路径。这在有关 Naming Files, Paths, and Namespaces 的 Microsoft 文档中进行了解释。本页进一步描述了在 Windows 上,目录分隔符是反斜杠字符 \,而不是 Linux 和 Mac 上的正斜杠 // 在 Windows 上主要用于选项,因为它可以在命令 CHOICE 中看到,因为该字符在文件/文件夹名称中是不可能的。 - 在 Linux/Mac 上用于选项,即使作为文件/文件夹名称的第一个字符,也可以在文件/文件夹名称中使用。因此,在 Windows 上 \ 应始终用作目录分隔符,尽管用于文件系统访问的 Windows 内核函数会自动将文件/文件夹名称中的 / 更正为 \
CHOICE 比带有选项 /P 的命令 SET 更适合提示用户从几个提供的选项中进行选择。 set/p 在语法上根本不正确,因为命令 set 应与选项 /P 中的空格分隔,该选项应与下一个参数 variable=prompt text 中的空格分隔。 set/p 强制 cmd.exe 自动将命令行更正为 set /p 。批处理文件应该在语法上正确编码,并且不依赖于 Windows 命令处理器的自动纠错。
要了解所使用的命令及其工作原理,请打开命令提示符窗口,在其中执行以下命令,并仔细阅读每个命令显示的所有帮助页面。
  • call /? ... 解释如何引用批处理文件参数。
  • echo /?
  • rem /?
  • cls /?
  • title /?
  • color /?
  • set /?
  • choice /?
  • if /?
  • goto /?

  • 此外,我建议阅读:
  • How does the Windows Command Interpreter (CMD.EXE) parse scripts?
  • Why is no string output with 'echo %var%' after using 'set var = text' on command line?
  • How to stop Windows command interpreter from quitting batch file execution on an incorrect user input?
  • Single line with multiple commands using Windows batch file
  • ECHO. FAILS to give text or blank line - Instead use ECHO/
  • Where does GOTO :EOF return to?
  • 关于batch-file - 批处理脚本调用自己的名称而不是某种类型的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53477985/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com