我需要帮助填补知识空白。不知道为什么处理不同,但肯定有一个合乎逻辑的解释。
以下代码适用于主例程。
IF exist "%pathfile%.mkv" (
set file_error=0
) ELSE (
set file_error=1
call :ERROR
)
然而,在我的脚本运行后,我回顾了我的结构化编程大学时代,并决定应该清理它并更有逻辑地组织它。所以我把这个文件检查移到一个可以从主程序调用的子程序中。
:ISFILETHERE
echo "%pathfile%.mkv" -->placed only for debug
IF exist "%pathfile%.mkv" (
set file_error=0
) ELSE (
set file_error=1
ECHO -----------------------------ERROR------------------------------------------
ECHO %file%.mkv does not exist in %fullpath%
ECHO ----------------------------------------------------------------------------
)
GOTO :EOF
变量说明:
set basepath=\\opennas\media\Movies\
set basefolder=%~1
set file=%~2
set fullpath=%basepath%%basefolder%\
set pathfile=%basepath%%basefolder%\%file%
所以 %pathfile%.mkv 是一个存储完整路径和文件名(不带扩展名)的变量,该变量来自上述预设默认值 + 用户条目的组合。
如果我在“%pathfile%.mkv”上做一个回显,输出就是我所期望的。然而,它似乎有一个问题,IF exist "%pathfile%.mkv" (
它在主系统中正确地通过它,但当它在从主系统调用的子系统中时却没有。setlocal 设置在文件的开头,没有 endlocal 也没有额外的选项。
尝试运行脚本的输出:
>mkv2wtv "Gattaca (1997)" "Gattac"
sub 内的调试回显,它简单地回显 %pathfile%:("\\opennas\media\Movies\Gattaca (1997)\Gattac.mkv"
引号在输出中应该是这样)下一行,应该是 If 语句,错误:'\ 在这个时间。'
我错过了什么,必须是合乎逻辑的,为什么这在主程序中有效,但是具有相同内容的变量的完全相同的代码在子程序中不起作用。
谢谢你看。