所以我想在子目录中运行操作(由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行的Do
之前添加If Exist
,脚本按预期运行但我会不断收到此错误
'Do'不被视为内部或外部命令
我是否可以在没有提示的情况下获得有关使脚本按预期运行的问题的帮助?
为什么在那个地方添加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"
)
)
)