Batch file 运行批处理文件时出现Echo关闭错误或Echo打开错误
所需的输出是,如果我们以“mcd…”的形式运行批处理文件,它应该返回三个目录。 但根据@Echo on或@Echo off运行时,它会给出Echo关闭/Echo打开错误。 如何解决此问题 这似乎有效Batch file 运行批处理文件时出现Echo关闭错误或Echo打开错误,batch-file,cmd,Batch File,Cmd,所需的输出是,如果我们以“mcd…”的形式运行批处理文件,它应该返回三个目录。 但根据@Echo on或@Echo off运行时,它会给出Echo关闭/Echo打开错误。 如何解决此问题 这似乎有效 @echo off set /p str=%1 :MSTART set /p ch=%str:~0,1% IF '%ch%' == '.' GOTO MEQUAL echo %ch% goto MEND :MEQUAL call cd.. set /p str=%str:~1% go
@echo off
set /p str=%1
:MSTART
set /p ch=%str:~0,1%
IF '%ch%' == '.' GOTO MEQUAL
echo %ch%
goto MEND
:MEQUAL
call cd..
set /p str=%str:~1%
goto MSTART
:MEND
但它给出的错误“1”在完成后的这个时候是意外的。如果不是[str]=[]设置str=%str:~1%,我想这一行就是罪魁祸首,但是如何修复呢 我认为错误来自echo%ch%,因为%ch%为空。。。因此,您正在显示回声设置。尝试:
@echo off
set str=%1
:MSTART
set ch=%str:~0,1%
IF '%ch%' == '.' GOTO MEQUAL
goto MEND
:MEQUAL
call cd..
IF NOT [str] == [] set str=%str:~1%
goto MSTART
:MEND
或
编辑
将此项添加到发布文件的开头
echo.%ch%
我认为错误来自回显%ch%,因为%ch%为空。。。因此,您正在显示回声设置。尝试:
@echo off
set str=%1
:MSTART
set ch=%str:~0,1%
IF '%ch%' == '.' GOTO MEQUAL
goto MEND
:MEQUAL
call cd..
IF NOT [str] == [] set str=%str:~1%
goto MSTART
:MEND
或
编辑
将此项添加到发布文件的开头
echo.%ch%
为什么这被标记为一个PHP问题?为什么这被标记为一个PHP问题?谢谢RGuggisberg,echo.%ch%成功了。但是为什么%ch%是空的,并且没有指向str的第一个字符。我的批处理文件的名称是mcd,我以“mcd…”的形式运行它。这是另一个问题,与您第一次提出的错误是开/关问题完全无关。现在问题并没有那么严格的定量,所以你真的应该为你的新问题提出另一个问题。出现新问题的原因是
[str]
是一个字符串,它永远不能等于[]
<如果str
为空,则code>[%str%]可能是空的,但更好的检查方法是如果定义了str
。目前,第一个字符将被反复从str
中删除,直到它变为空,这将导致set ch出现语法问题。
Peter提出了一个很好的观点。这个问题似乎已经改变了,现在我们不再确定我们在哪里。对于最初的问题。。。您可能应该检查以确保%1不是空的。请参阅我编辑的答案。set str=%~1Thanks RGuggisberg,echo.%ch%有效。但是为什么%ch%是空的,并且没有指向str的第一个字符。我的批处理文件的名称是mcd,我以“mcd…”的形式运行它。这是另一个问题,与您第一次提出的错误是开/关问题完全无关。现在问题并没有那么严格的定量,所以你真的应该为你的新问题提出另一个问题。出现新问题的原因是[str]
是一个字符串,它永远不能等于[]
<如果str
为空,则code>[%str%]可能是空的,但更好的检查方法是如果定义了str
。目前,第一个字符将被反复从str
中删除,直到它变为空,这将导致set ch出现语法问题。
Peter提出了一个很好的观点。这个问题似乎已经改变了,现在我们不再确定我们在哪里。对于最初的问题。。。您可能应该检查以确保%1不是空的。请参阅我编辑的答案。set str=%~1