批处理文件`@`符号导致错误

时间:2016-12-21 13:55:30

标签: batch-file cmd echo

我有一个批处理文件,我正在努力工作,但我无法抑制几个命令的输出。我尝试过的一个解决方案是使用@符号启动命令 - (我已成功完成了很多次)。这是代码:

@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上正常工作。

1 个答案:

答案 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!"