我有一个批处理文件,我正在尝试使其工作,但我无法抑制几个命令的输出。我尝试过的一种解决方法是使用@
符号开头的命令-(我已经成功地做过很多次)。以下是代码:
@echo off
setlocal
for /f "tokens=*" %%i in (tmp\hdata.txt) do (
::' just a note - hdata.txt contains lines of text such as,
::' for example:
::' jquery_javascript_32
::' underscore_javascript_9
::' I couldn't do this with simple delimiters because some lines are like:
::' underscore_js_javascript_43
set "id=%%i"
set filewithnum=!id:_javascript_=!
::' *** BELOW throws error ***
@echo !filewithnum!|findstr /R "[0-9]$" && set "file=!filewithnum:~,-1!" >nul 2>&1
::' *** BELOW throws error ***
@echo !filewithnum!|findstr /R "[0-9]$" && set "file=!file:~,-1!" >nul 2>&1
echo !file!
)
endlocal
exit /b
上面注释的这些代码行会抛出错误:'@echo' is not recognized as an internal or external command, operable program or batch file.
看起来很奇怪。
你有什么想法吗?
注意:上面注释::
后面额外的'
是为了使stackoverflow上的语法高亮正常工作。
setlocal
却没有使用setlocal enabledelayedexpansion
,因此!var!
语法将无法工作,这是一个明显的问题。第二个问题是::
是一个错误的标签,而在代码块内不允许使用标签 - 应该替换为rem
。 - Magooenabledelayedexpansion
,所以我不需要它。关于::
的知识很好。我之前不知道;但在这种情况下,这不是问题,因为这些注释只添加到了Stackoverflow
上,并没有包含在原始文件中。 - dgo()
中的命令块内永远不要使用:label
或:: label-like comment
。 - JosefZ