Batch file 删除windows批处理脚本中的文件无效
我正在尝试创建一个批处理脚本,用于从文件夹中所有mp4文件的开头开始修剪25秒。批处理脚本与文件位于同一文件夹中,在同一文件夹中有一个名为Batch file 删除windows批处理脚本中的文件无效,batch-file,ffmpeg,Batch File,Ffmpeg,我正在尝试创建一个批处理脚本,用于从文件夹中所有mp4文件的开头开始修剪25秒。批处理脚本与文件位于同一文件夹中,在同一文件夹中有一个名为trimmed的文件夹。这是我目前的脚本: @echo off setlocal DisableDelayedExpansion :promptdel set /p delorig=Delete original file (default no)? [Y/N]: if not defined delorig ( set delorig=N ) s
trimmed
的文件夹。这是我目前的脚本:
@echo off
setlocal DisableDelayedExpansion
:promptdel
set /p delorig=Delete original file (default no)? [Y/N]:
if not defined delorig (
set delorig=N
)
set "vartwo="&for /f "delims=YNyn" %%i in ("%delorig%") do set vartwo=%%i
if defined vartwo (
echo Please state Y or N!
goto :promptdel
)
for %%a in ("*.mp4") do (
echo Starting %%a
rem "Need to rename since file names may contain whitespaces"
ren "%%a" "working.mp4"
ffmpeg -loglevel panic -hide_banner -i "working.mp4" -ss 00:00:25.000 -c:v copy -c:a copy "trimmed\%%a"
ren "working.mp4" "%%a"
echo %delorig%
if %delorig% == "Y" (del "%%a" /f /q)
if %delorig% == "y" (del "%%a" /f /q)
echo %%a finished!
)
pause
我的问题是,无论我输入的是y/y还是n/n,原始文件都不会被删除。我做错了什么?你引用了等式的一面。。。但不是另一个。改变
if %delorig% == "Y" (del "%%a" /f /q)
if %delorig% == "y" (del "%%a" /f /q)
到
或者更好的是。。。这样做可以使比较不区分大小写
if /i "%delorig%"=="Y" del "%%a" /f /q
我决定将此答案包括在内,因为我认为修复在技术上并不是解决您遇到的问题的最佳方法 最好的方法是使用
choice
命令,而不是通过set/p
允许不受控制的输入数据
据我所知,没有必要更改包含空格的名称,尤其是当您的ffmpeg
代码已经使用双引号文件名时
例如:
@Echo关闭
“%\uuuu AppDir\uuuu%choice.exe”/T 10/D N/M”删除原始文件[默认编号]”
设置“delorig=%ErrorLevel%”
对于%%G In(“*.mp4”)Do(回声开始%%G
“ffmpeg.exe”-日志级死机-隐藏条幅-i”%%G”-ss 00:00:25.000-c:v副本-c:a副本“修剪\%%G”
如果不是错误,则级别1如果%delorig%Equ 1 Del/F/Q“%%G”
回声%%G已完成!)
暂停
请注意,我已包含
ffmpeg
的扩展名,以防止意外修改%PATHEXT%
而不运行.EXE
文件。如果已知/可能,我还建议您使用ffmpeg.exe
的完整路径,以确保可能的%path%
/目录/注册表更改不会阻止其运行(因为代码未明确设置当前目录)。此外,代码不会首先确保名为trimmed
的目录存在于当前目录中,因此如果ffmpeg
无法自己创建它,您可能应该执行检查,和/或首先创建它。代码中缺少=
左右两侧的空格。它们对于100%语法正确的代码非常重要,正如我在上节的回答中所解释的。Windows命令处理器通常会自动检测(取决于比较的字符串)该语法错误,并自动更正行,并在运算符参数周围插入缺少的空格,但是,最好在批处理文件中写入100%正确的代码,而不是依赖于自动更正。如果“hello”=“world”echo作为第一行,@pause
作为第二行,并执行此批处理文件。输出是通过cmd.exe
行如果“hello”=“world”echo代码>。因此,在执行IF命令行之前,Windows命令处理器在运算符参数=
周围插入了缺少的空格。顺便说一句:在批处理文件中使用==
周围的空格使代码在我看来也更容易阅读,特别是在不使用带有批处理文件语法高亮显示的文本编辑器时。
if /i "%delorig%"=="Y" del "%%a" /f /q