批处理脚本错误:"此时goto意外发生"

时间:2014-07-14 02:36:06

标签: batch-file cmd goto

在将文件拖放到下面时,我在下面的脚本中收到错误。行goto CONTINUE上的错误“此时意外发生”

我读到在某些情况下可以使用 enabledelayedexpansion 阻止此错误,但这不适用于此。

我还读到,如果未设置errorlevel,则会发生此错误。我发现2> nul pushd在%~1是文件时设置错误级别,所以在goto FILE之前使用命令cmd / c退出0来重置错误级别。这确实重置了错误级别,但错误仍然存​​在。

我希望有人能够指出我的方式的错误。谢谢!

@echo off
set rootDir=%~dp0
cd "%rootDir%"

del BatchTask.log

echo |TIME|FIND /i "current">>BatchTask.log
echo |DATE|FIND /i "current">>BatchTask.log

:CONTINUE
if %1 == "" goto END
set inDir="%~1"

if exist "%~1" (2>nul pushd "%~1" && (popd&goto FOLDER) || (cmd /c exit 0)&goto FILE)

:FILE
set outDir=%~dp1
IF %outDir:~-1%==\ (SET outDir=%outDir:~0,-1%)
goto CONVERT

:FOLDER
set outDir=%~1
goto CONVERT

:CONVERT
set outDir="%outDir%_Out"
shift
"%rootDir%\out\ReleaseWithSymbols\Converter.exe" %inDir% %outDir% 

goto CONTINUE

:END
cd "%rootDir%"

echo |TIME|FIND /i "current">>BatchTask.log
echo |DATE|FIND /i "current">>BatchTask.log

1 个答案:

答案 0 :(得分:1)

我认为这是因为"转移"呼叫。 我尝试给这个文件提供两个参数,并且只为第二个文件出错。

你可能会尝试将goto语句放在if条件中。 像:

if NOT "%1" == "" goto CONTINUE