如何在 ffmpeg 的 BATCH 脚本中随机使用?

如何在 ffmpeg 的 BATCH 脚本中随机使用?

我现在无法让它们工作。我试图创建一个文件顺序随机的文本文件。我试过了,但似乎 .text 文件中的顺序并不像我想要的那样随机。请帮我给出解决方案。谢谢。

@echo off
setlocal EnableDelayedExpansion
set /A rand=%random%
for %%i in (*.mp4) do (
    ren "%%i" "!rand!_%%i"
)
(for %%i in (*.mp4) do @echo file '%%i') > mylist.txt

如果您觉得难以理解,请看下面的屏幕截图。

批量截图

答案1

两个 Windows 10 64 位批处理文件,用于使用相同的随机数重命名文件或使用不同的随机数重命名文件。

我不确定您想做什么,所以我给了您几个例子,并且我将单引号改为双引号。

开始测试

如果你希望每个重命名的文件都以相同的随机数开头

@echo off
del mylist.txt
for %%i in (*.mp4) do echo "%%i" "%random%_%%i" >> mylist.txt
exit /b

如果你希望每个重命名的文件都以不同的随机数开头

@echo off
setlocal EnableDelayedExpansion
del mylist.txt
REM Prevent !random! from being applied more than once.
for /f %%i in ('dir /b *.mp4') do echo "%%i" "!random!_%%i" >> mylist.txt
exit /b

结束测试

开始重命名

如果你希望每个重命名的文件都以相同的随机数开头

@echo off
for %%i in (*.mp4) do ren "%%i" "%random%_%%i" 
dir /b *.mp4 > mylist.txt
exit /b

如果你希望每个重命名的文件都以不同的随机数开头

@echo off
setlocal EnableDelayedExpansion
REM Prevent !random! from being applied more than once.
for /f %%i in ('dir /b *.mp4') do ren "%%i" "!random!_%%i" 
dir /b *.mp4 > mylist.txt
exit /b

结束重命名

如果您正在谈论资源管理器如何对文件进行排序,请尝试以下操作: Windows 资源管理器按选项排序

找到 .mp4 中的某个属性,让它为你提供所需的顺序。如果没有属性能让你获得所需的顺序,则更改每个文件的属性,让它为你提供所需的顺序。

我想我现在明白你想要什么了。

(for /f %%i in ('dir /b /od *.mp4') do echo "%%i") > mylist.txt

给出:

"5.mp4"
"2.mp4"
"1.mp4"
"6.mp4"
"3.mp4"
"7.mp4"
"4.mp4"

排序顺序基于日期和修改时间。您的文件的创建日期和修改时间很可能与我的文件不同,因此您的结果会有所不同。这能满足您的要求吗?

答案2

_ // mp3 led zero 名称的答案相同_\ _


考虑到预防情况,在处理过程中已经选择了随机数,并且某些文件具有相同的名称/编号,则将生成一个新的随机数,以确保每次重命名都获得唯一的名称/编号...

goto :Leed_by_Zero
@echo off & setlocal enabledelayedexpansion & title <nul & title ...\%~pn0

for /f delims^= %%a in ('where.exe ".:*.mp4"')do call :] "%%~dpa" "%%~nxa"
:^]
for /f %%f in ('set /a _num^=!random!*1000/32768+1')do set "_name_num=%%f"
if not exist "%~1_name_num!.mp4" ren "%~1%~2" "!_name_num!.mp4" 2>nul && (
exit /b ) || ( if "%~1-%~2" == "-" ( goto :^[ ) else (rem./ && goto :^] ))

:^[
>paths.txt (for /f tokens^=* %%i in ('dir/b/od *.mp4')do echo=file '%%~fi')
>names.txt (for /f tokens^=* %%j in ('dir/b/od *.mp4')do echo=file '%%~nxj')

rem./ the paths.txt file will save in for loop the full file path: file.mp4
rem./ the names.txt file only get in loop the file name.extension: file.mp4
  • Leed by Zero
@echo off & setlocal enabledelayedexpansion & title <nul & title ...\%~pn0

for /f delims^= %%a in ('where.exe ".:*.mp4"')do call :] "%%~dpa" "%%~nxa"
:^]
for /f %%f in ('set /a _num^=!random!*1000/32768+1')do set "_name_num=%%f"
call set "_name_num=000!_name_num!" &&call set "_name_num=!_name_num:~-4!"
if not exist "%~1_name_num!.mp4" ren "%~1%~2" "!_name_num!.mp4" 2>nul && (
exit /b ) || ( if "%~1-%~2" == "-" ( goto :^[ ) else (rem./ && goto :^] ))

:^[
>paths.txt (for /f tokens^=* %%i in ('dir/b/od *.mp4')do echo=file '%%~fi')
>names.txt (for /f eol^=^| %%j in ('dir/b/o:d *.mp4')do echo=file '%%~nxj')

rem./ the paths.txt file will save in for loop the full file path: file.mp4
rem./ the names.txt file only get in loop the file name.extension: file.mp4

相关内容