因此,我只想在子目录中包含S1
文件以及.mkv
/ .ttf
的情况下,才在子目录中运行该操作(用.otf
表示)文件。这是我所做的事...
For /F Delims^=^ EOL^= %%A In ('Dir/B/AD 2^>Nul^|FindStr/IVXC:"Revised"'
) Do If Exist "%%A\*.mkv" (
If Exist "%%A\*.ttf" (
If Not Exist "Revised\" MD "Revised" 2>Nul||Exit /B
Call :S1 "%%A")
) else (
If Exist "%%A\*.otf" (
If Not Exist "Revised\" MD "Revised" 2>Nul||Exit /B
Call :S1 "%%A"))
GoTo :EOF
问题是S1
操作仅在存在.otf
文件而不是.ttf
文件时发生。但是,如果我这样做...
For /F Delims^=^ EOL^= %%A In ('Dir/B/AD 2^>Nul^|FindStr/IVXC:"Revised"'
) Do If Exist "%%A\*.mkv" (
Do If Exist "%%A\*.ttf" (
If Not Exist "Revised\" MD "Revised" 2>Nul||Exit /B
Call :S1 "%%A")
) else (
If Exist "%%A\*.otf" (
If Not Exist "Revised\" MD "Revised" 2>Nul||Exit /B
Call :S1 "%%A"))
GoTo :EOF
通过在第3 rd 行中的Do
之前添加If Exist
,该脚本可以按预期运行,但我会不断收到此错误
'Do'不被识别为内部或外部命令
在没有提示的情况下让脚本按预期运行的问题,我能否获得帮助?
答案 0 :(得分:1)
您为什么要在该位置添加do
? If Exist "%%A\*.mkv" ( Do something )
将运行名为do
的命令(如果该文件存在),但是由于该命令不存在,执行将失败,并显示以上消息
在for
循环中,单词do
是语法的一部分,因此,在每个循环中要运行的命令之前,必须先拥有它。运行for /?
以获得有关语法的帮助
此外,您的描述不清楚。您是否要呼叫S1
您的代码正在执行前者。很难看到,因为您的缩进非常糟糕。修复后就可以了
For /F Delims^=^ EOL^= %%A In ('Dir/B/AD 2^>Nul^|FindStr/IVXC:"Revised"') Do (
If Exist "%%A\*.mkv" (
If Exist "%%A\*.ttf" (
If Not Exist "Revised\" MD "Revised" 2>Nul||Exit /B
Call :S1 "%%A"
)
) else (
If Exist "%%A\*.otf" (
If Not Exist "Revised\" MD "Revised" 2>Nul||Exit /B
Call :S1 "%%A"
)
)
)
但是为什么在/V
中使用2个矛盾的选项(/X
和findstr
)?人们经常使用全部小写或全部大写的命令/关键字,而不是像这样的CamelCase。因此,要检查后一种情况,您可以使用此
for /f delims^=^ eol^= %%a in ('dir /b /ad 2^>nul ^| findstr /IVXC:"Revised"') do (
if exist "%%a\*.mkv" (
if exist "%%a\*.ttf" (
if not exist "Revised\" md "Revised" 2>nul || exit /b
Call :S1 "%%a"
)
if exist "%%a\*.otf" (
if not exist "Revised\" md "Revised" 2>nul || exit /b
call :S1 "%%a"
)
)
)