批处理脚本/如果 - 如果不工作

时间:2014-07-09 18:49:46

标签: batch-file

我有这个脚本,有效:

  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

2 个答案:

答案 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>(而不是单个命令来超越解析器:

)