我有这个脚本,有效:
FOR /F "delims=\" %%i IN ('dir /b /ad-h /o-d') DO (
SET a=%%i
GOTO :found
)
echo No subfolder found
goto :eof
:found
echo Most recent video created: &echo. & echo."%a%"
if /i "%a:~-3%"=="ESP" goto:next else goto:GBR
:GBR
if /i "%a:~-3%"=="GBR" goto:next else goto:SPE
:SPE
if /i "%a:~-3%"=="SPE" goto:next
cd %a%
for %%a in (*) do rename "%%a" "%%~na-%a%%%~xa"
cd ..\
ren "%a%" "%a% - GBR"
echo.
echo %a% video has been processed
echo.
pause
exit /b
:next
echo.
echo. %a% Video already processed
echo.
pause
:exit
exit /b
我试图让IF ELSE
工作,但我不能。我不得不使用标签,但如果我要扩展搜索条件,它就不是一种干净的方式。
我错过了什么吗?
这就是我累了,这不起作用:
echo Most recent video created: &echo. & echo."%a%"
if /i "%a:~-3%"=="ESP" goto:next else
if /i "%a:~-3%"=="GBR" goto:next else
if /i "%a:~-3%"=="SPE" goto:next
答案 0 :(得分:2)
尽量不要使用类似于已经使用%something%:
分配的变量名称for %%b in (*) do rename "%%a" "%%~nb-%a%%%~xb"
更新:(可能不起作用。只是一个概念)
setlocal enabledelayedexpansion
FOR /F "delims=\" %%i IN ('dir /b /ad-h /o-d') DO (
SET a=%%i
GOTO :found
)
echo No subfolder found
goto :eof
:found
echo Most recent video created: &echo. & echo."!a!"
if /i "%a:~-3%"=="ESP" goto:next else goto:GBR
:GBR
if /i "%a:~-3%"=="GBR" goto:next else goto:SPE
:SPE
if /i "%a:~-3%"=="SPE" goto:next
cd !a!
for %%b in (*) do rename "%%b" "%%~nb-!a!%%~xb"
cd ..\
ren "!a!" "!a! - GBR"
echo.
echo !a! video has been processed
echo.
pause
exit /b
:next
echo.
echo. !a! Video already processed
echo.
pause
:exit
exit /b
答案 1 :(得分:0)
if /i "%a:~-3%"=="ESP" goto:next else goto:GBR
:GBR
这里不需要else goto:GBR
,因为如果不符合比较,脚本会继续下一行:
if /i "%a:~-3%"=="ESP" goto:next
if /i "%a:~-3%"=="GBR" goto:next
if /i "%a:~-3%"=="SPE" goto:next
echo found none of them.
Exit /b
:next
echo found one of them.
如果要使用else
,则命令必须位于同一行((
作为“命令块的开头”,并且必须与{{1}位于同一行}}):
else
如果事实,if /i "%a:~-3%"=="ESP" goto:next else (
if /i "%a:~-3%"=="GBR" goto:next else (
if /i "%a:~-3%"=="SPE" goto:next
)
)
:next
,if
,<comparison>
,<command>
和else
的所有内容都必须在同一条线上。您可以使用<command>
块(
而不是单个命令来超越解析器:
)