Tiene problemas con IF nested en un archivo por lotes

Estoy haciendo un archivo por lotes para verificar un proyecto desde SVN. Le pido al usuario que ingrese el directorio y cuando llegue al directorio que desea, escriba “checkout” y verifica ese directorio del proyecto. Sin embargo, estoy teniendo problemas con el código a continuación. Por favor ayuda.

if /i %choice%==1 ( cls svn ls %svnroot_temp% :top set /p direct=Enter directory: if %direct%=checkout( goto :checkout_area ) set svnroot_temp= %svnroot_temp%/%direct% svn ls %svnroot_temp% goto :top ) 

¿Dónde me estoy equivocando aquí?

Nunca utilice :label ni :: label-like comment dentro de un bloque de comandos encerrado entre () paréntesis. Prueba :

 @ECHO %1>NUL if "" == "" ( @echo a simple echo, no comments ) if ""=="" ( @echo a rem comment follows this echo command rem comment @echo a rem comment precedes this echo command ) if ""=="" ( @echo a label-like comment follows this echo command :: comment @echo a label-like comment precedes this echo command ) if ""=="" ( @echo a label follows this echo command :label @echo a label precedes this echo command ) 

Salida :

 ==>D:\bat\labels.bat OFF a simple echo, no comments a rem comment follows this echo command a rem comment precedes this echo command a label-like comment follows this echo command '@echo' is not recognized as an internal or external command, operable program or batch file. a label follows this echo command '@echo' is not recognized as an internal or external command, operable program or batch file. ==> 

El siguiente fragmento de código debería funcionar como se espera, si puedo entender tu objective:

 SETLOCAL enableextensions rem (set `svnroot_temp` and `choice` variables here) if /i "%choice%"=="1" ( cls svn ls %svnroot_temp% call :top ) goto :eof :top set /p direct=Enter directory: if /I "%direct%"=="checkout" goto :checkout_area set "svnroot_temp=%svnroot_temp%\%direct%" svn ls %svnroot_temp% goto :top :checkout_area 

Tenga en cuenta que ambas expresiones comparadas en if /I "%direct%"=="checkout" goto :checkout_area están entre comillas dobles ya que cualquier entrada del usuario podría contener un espacio o incluso permanecer vacía.
No estoy seguro de citar en svn ls "%svnroot_temp%" .

No estoy seguro de si "%svnroot_temp%" es un directorio de entrada o salida para el svn ls :

  • en caso de entrada: compruébalo usando if not exist "%svnroot_temp%\%direct%\" goto :top antes de cambiarlo por el set "svnroot_temp=%svnroot_temp%\%direct%"
  • en caso de salida: MD "%svnroot_temp%" 2>NUL usando MD "%svnroot_temp%" 2>NUL después de cambiarlo.