Batch file Findstr没有';不接受变量CMD
其目的是扫描给定文件夹中的媒体文件,并将mediainfo发送到info.txt,但也为用户提供了仅扫描具有特定文本字符串的文件的选项。 我的bat文件:Batch file Findstr没有';不接受变量CMD,batch-file,cmd,Batch File,Cmd,其目的是扫描给定文件夹中的媒体文件,并将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
@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”部分工作不正常,但我无法获得错误,因为随着眼睛的闪烁,它会消失&我无法对其进行故障排除如果您保持ECHO打开并删除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
行
set/P“_mask=*.wmv*.mpg*.mkv*.mpeg*.mp4*.avi”
不应提示,因为我们正在设置“搜索所有文件”option@SeanCheshire-是的,那是我的复制粘贴错误。全部固定在代码中。