我需要帮助填补知识空白。不确定为什么处理方式不同,但确定有合理的解释。
以下代码适用于主程序。
IF exist "%pathfile%.mkv" (
set file_error=0
) ELSE (
set file_error=1
call :ERROR
)
然而,在我运行脚本之后,我仔细阅读了回到我的结构化编程大学时代,并决定应该清理和组织更多的逻辑。所以我将这个文件检查移动到一个可以从main调用的子例程。
: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"
内部的debug-echo只是回显%pathfile%:"\\opennas\media\Movies\Gattaca (1997)\Gattac.mkv"
(引号在输出中应该是)
下一行应该是If语句,错误:'\'此时是意外的。'
我缺少什么,必须是为什么这在主要工作中是合乎逻辑的,但具有相同内容的变量的完全相同的代码在子中不起作用。
感谢您一看。
答案 0 :(得分:0)
解析IF
后,扫描从IF
到右括号的整个语句,并将 ANY %var%替换为 PARSE-TIME 内容。
因此,(1997)
中的右括号被视为IF
的右括号, * THAT 将代码转换为错误的格式。
治愈是用一个插入符号(^
)来逃避那个近括号,但如果它在一个变量中,这可能会很不方便。
以下是一些可能有用的代码:
@ECHO OFF
SETLOCAL
SET var=1234)567)89
ECHO %var%
SET var=%var:)=^^^^)%
ECHO %var%