Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file Findstr没有';不接受变量CMD_Batch File_Cmd - Fatal编程技术网

Batch file Findstr没有';不接受变量CMD

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

其目的是扫描给定文件夹中的媒体文件,并将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”部分工作不正常,但我无法获得错误,因为随着眼睛的闪烁,它会消失&我无法对其进行故障排除

如果您保持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-是的,那是我的复制粘贴错误。全部固定在代码中。