我有一个批处理文件,我正在努力工作,但我无法抑制几个命令的输出。我尝试过的一个解决方案是使用@
符号启动命令 - (我已成功完成了很多次)。这是代码:
@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上正常工作。
答案 0 :(得分:3)
一旦你修复了评论中提出的Magoo点,你需要抑制findstr
的输出。您不需要@
,因为在脚本开始时命令回显模式已经关闭。
你有这个:
@echo !filewithnum!|findstr /R "[0-9]$" && set "file=!filewithnum:~,-1!" >nul 2>&1
所以你要重定向set
命令的输出!要重定向findstr
的输出,请执行以下操作:
echo !filewithnum!|findstr /R "[0-9]$" >nul 2>&1 && set "file=!filewithnum:~,-1!"