0

目的是扫描给定文件夹中的媒体文件并将 mediainfo 发送到 info.txt 但也为用户提供仅扫描具有特定文本字符串的文件的选项。我的bat文件:

@echo off
setLocal EnableDelayedExpansion
echo. >info.txt
set /P "folder=Enter folder path: "
set /P "_input=Search all files (y/n): "

if /I "%_input%" == "y" (
    dir %folder% /B /O:N | findstr /I ".wmv$ .mpg$ .mkv$ .mpeg$ .mp4$ .avi$" >filename.txt 
    for /f "tokens=* delims= " %%a in ('type filename.txt') do ( 
    set _in=%_in%%%a 
    mediainfo --Inform=file://template.txt "%folder%!_in!" >>info.txt 
    echo. >>info.txt 
    )
) else ( 
    set /P "_str=Enter file string: " 
    dir %folder% /B /O:N | findstr /I "%_str%" >filename.txt
    for /f "tokens=* delims= " %%a in ('type filename.txt') do ( 
    set in=%in%%%a 
    mediainfo --Inform=file://template.txt "%folder%!in!" >>info.txt 
    echo. >>info.txt 
    )
)

del filename.txt
cls
pause

虽然 if 循环的第一部分工作正常,但 'else' 部分没有,但我无法得到错误,因为眨眼间它就消失了,我无法解决它

4

1 回答 1

2

如果您让 ECHO ON 并移除 CLS 或在 CLS 之前暂停,您可以进行故障排除。

您的 ELSE 块失败,因为您在块内设置 _str 然后尝试通过正常扩展使用该值。您需要使用延迟扩展。

甚至您的第一个 IF 块看起来也是错误的,因为您的 SET 语句使用的是正常扩展。最终结果是每次迭代只是将当前文件名传递给 mediainfo,这实际上是有道理的。在我看来,您甚至不需要任何一个块中的 _in 变量。

您的代码比需要的要复杂得多:我相信以下内容会给出您正在寻找的结果:

@echo off
setlocal
echo. >info.txt
set /P "folder=Enter folder path: "
set /P "_input=Search all files (y/n): "
if /i "_input" == "y" (
    set "_mask=*.wmv *.mpg *.mkv *.mpeg *.mp4 *.avi"
) else (
    set /P "_mask=Enter file string: "
)
if /i "_input" neq "y" set "_mask=*%_mask%*"
pushd "%folder%"
set "popped="
for %%F in (%_mask%) do (
  if not defined popped popd
  set popped=1
  mediainfo --Inform=file://template.txt "%%F" >>info.txt
  echo. >>info.txt
)
pause

我会更进一步,并希望用户在文件字符串中提供任何通配符。这会给用户更多的控制权,并会进一步简化代码。

@echo off
setlocal
echo. >info.txt
set /P "folder=Enter folder path: "
set /P "_input=Search all files (y/n): "
if /i "_input" == "y" (
    set "_mask=*.wmv *.mpg *.mkv *.mpeg *.mp4 *.avi"
) else (
    set /P "_mask=Enter file mask: "
)
pushd "%folder%"
set "popped="
for %%F in (%_mask%) do (
  if not defined popped popd
  set popped=1
  mediainfo --Inform=file://template.txt "%%F" >>info.txt
  echo. >>info.txt
)
pause
于 2012-11-01T15:15:59.983 回答