gpt4 book ai didi

batch-file - 批量存储 %%f 作为变量

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

我一直在尝试使用 %%f 在目录中的每个文件上操作脚本,但是当通过脚本引用它时, %%f 和 %%~nf 似乎不起作用。我的编程经验有限,我正在尝试制作更有用的 this video formatting tutorial 版本.

所以我想将 %%f 和 %%~nf 存储为变量以供脚本的其余部分引用,尽管我不知道如何。

@echo off
set /p FORMAT="Enter File Format: "
FOR %%f IN (*.%FORMAT%) DO echo %%f
set TEST=%%f
echo %TEST%
cmd/k

如果我可以存储这些,它将解决我的问题,但是这是我正在尝试做的更长的形式,如果我让用户手动将文件输入到变量中(%VIDEO%=%%f 和%~nf)。虽然这远非理想。
@echo off
set /p FORMAT="Enter File Format: "

FOR %%f IN (*.%FORMAT%) DO (
::IDFILE
for /F "delims=" %%I in ('C:\ffmpeg\bin\ffprobe.exe -v error -show_entries format^=filename -of default^=noprint_wrappers^=1:nokey^=1 "%%f"') do set "FILENAME=%%I"

for /F "delims=" %%I in ('C:\ffmpeg\bin\ffprobe.exe -v error -select_streams v:0 -show_entries stream^=codec_name -of default^=noprint_wrappers^=1:nokey^=1 "%%f"') do set "Vcodec=%%I"

for /F "delims=" %%I in ('C:\ffmpeg\bin\ffprobe.exe -v error -select_streams a:0 -show_entries stream^=codec_name -of default^=noprint_wrappers^=1:nokey^=1 "%%f"') do set "Acodec=%%I"

echo %FILENAME% is using %Vcodec% and %Acodec% codecs

if %Vcodec% == h264 (echo DO NOT CONVERT VIDEO) else (echo CONVERT VIDEO)
if %Acodec% == ac3 (echo DO NOT CONVERT AUDIO) else (echo CONVERT AUDIO)
timeout /t 5

:: COPY V FIX A
if %Vcodec% == h264 if not %Acodec% == ac3 (echo Copying Video, Converting Audio
timeout /t 5
C:\ffmpeg\bin\ffmpeg.exe -i "%%f" -map 0 -vcodec copy -scodec copy -acodec ac3 -b:a 640K "%%~nf"-AC3.mkv)

:: FIX V COPY A
if not %Vcodec% == h264 if %Acodec% == ac3 (echo Converting Video, Copying Audio
timeout /t 5
C:\ffmpeg\bin\ffmpeg.exe -i "%%f" -map 0 -vcodec libx264 -scodec copy -acodec copy "%%~nf-"h264.mkv)

:: FIX V FIX A
if not %Vcodec% == h264 if not %Acodec% == ac3 (echo Converting Video, Converting Audio
timeout /t 5
C:\ffmpeg\bin\ffmpeg.exe -i "%%f" -map 0 -vcodec libx264 -scodec copy -acodec ac3 -b:a 640K "%%~nf"-h264-AC3.mkv)

:: COPY V COPY A
if %Vcodec% == h264 if %Acodec% == ac3 (echo "Doesn't require any Conversion")
)
pause
cmd/k

最佳答案

错过了那么多!

@echo off
set /p FORMAT="Enter File Format: "

FOR %%f IN (*.%FORMAT%) DO (
set "video=%%f"
set "namepart=%%~nf"
call :idfile
)
pause
goto :eof

.. then the remainder of your code, except Modify the comment `::IDfile` to a
label `:idfile` (1 fewer colon) remove the `)` before the `pause`
and replace the `cmd /k` with `goto :eof` and replace `%%f`, `%%~nf` with
`%video%`, `%namepart%` respectively.

您的代码存在两个主要问题: delayed expansion (关于 SO 有很多很多引用资料 - 只需使用顶部栏中的 search 工具)和代码块(括号内的系列行),其中不允许使用标签。

我建议的更改只是将您的代码的全部内容变成了一个子例程。

您还可以(也许最好)将代码更改为
@echo off
set /p FORMAT="Enter File Format: "

FOR %%f IN (*.%FORMAT%) DO call :idfile "%%f"

pause
goto :eof

然后,而不是使用 videonamepart在子程序中,使用 %~1%%~n1 (因为 %1 是子程序的第一个参数; ~ 删除引号(如果 %%f 包含空格,则确保正确处理))

关于batch-file - 批量存储 %%f 作为变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44693096/

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