Batch file 批处理文件“@”符号导致错误

Batch file 批处理文件“@”符号导致错误,batch-file,cmd,echo,Batch File,Cmd,Echo,我有一个批处理文件,我正试图得到工作,我有困难抑制几个命令的输出。我尝试过的一种解决方案是用@符号启动命令(我已经成功地做了很多次)。代码如下: @echo关闭 setlocal 对于(tmp\hdata.txt)中的/f“tokens=*”%%i,请执行以下操作( :“只需一个注释-hdata.txt包含以下几行文本:, :“例如: :“jquery\u javascript\u 32 :“下划线\u javascript\u 9” :“我无法使用简单的分隔符,因为某些行如下所示: :“下划线

我有一个批处理文件,我正试图得到工作,我有困难抑制几个命令的输出。我尝试过的一种解决方案是用
@
符号启动命令(我已经成功地做了很多次)。代码如下:

@echo关闭
setlocal
对于(tmp\hdata.txt)中的/f“tokens=*”%%i,请执行以下操作(
:“只需一个注释-hdata.txt包含以下几行文本:,
:“例如:
:“jquery\u javascript\u 32
:“下划线\u javascript\u 9”
:“我无法使用简单的分隔符,因为某些行如下所示:
:“下划线”\u js\u javascript\u 43
设置“id=%%i”
设置filewithnum=!id:\u javascript\u=!
::“***下面抛出错误***
@echo!filewithnum!| findstr/R“[0-9]$”&&set“file=!filewithnum:~,-1!”>num2>&1
::“***下面抛出错误***
@echo!filewithnum!| findstr/R“[0-9]$”&&set“file=!file:~,-1!”>num2>&1
回声!文件!
)
端部
退出/b
上面注释的行抛出:
“@echo”不被识别为内部或外部命令、可操作程序或批处理文件。

看起来很奇怪

你知道这里发生了什么吗



注意:上述注释后的额外的
是为了使语法突出显示在stackoverflow上正常工作。

一旦您修复了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!"

两个明显的问题是,您使用了
setlocal
,但没有使用
setlocalenabledelayedexpansion
,因此
!瓦尔语法将不起作用。第二个是
::
是一个坏标签,并且块内不允许使用标签-替换为
rem
@Magoo-我在注册表中启用了
enabledelayedexpansion
,所以我不需要它。很高兴了解
。我不知道;但在本例中,这不是问题所在,因为注释仅添加到
Stackoverflow
,未包含在原始文件中。这回答了我真正想要答案的问题,因此,谢谢。如果你能告诉我:是双
@
语法导致了错误,我会接受这个答案?您确实获得了投票权,但我确实想知道为什么会抛出该错误。@user1167442我认为您获得该特定错误的原因是未记录的cmd.exe之谜之一,但您会发现,如果您将
样式的注释替换为
rem
,您的问题就会消失
::
从来没有被用作注释,因此如果您使用的是未记录的功能,任何行为都是允许的。您可以使用
作为注释,即使是在命令块内,但您应该确切地知道其行为。
:label
后面的第二行不会将
@
检测为特殊字符,而是尝试以另一种方式执行名为
@echo.bat
的文件,这是100%纯“批处理”:
对于(0 1 9)中的/L%i,如果“!filewithnum:~-1!”=%i“set”file=!filewithnum:~,-1!”
@KlitosKyriacou-聪明。