У меня есть пакетный файл, который я пытаюсь получить, и у меня возникают проблемы с подавлением вывода нескольких команд. Одно из моих решений - запустить команды с символом @
- (что-то, что я сделал достаточно много раз). Вот код:Ошибка командного файла `@`
@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', поэтому '' вар синтаксис не будет работать!. Во-вторых, '::' является сломанной меткой, а метки не разрешены в блоке - замените на 'rem' – Magoo
@Magoo. В реестре включена функция enablededayeexpansion, поэтому мне это не нужно. Это хорошо знать о '::'. Я этого не знал; но в этом случае это не проблема, так как комментарии были добавлены только в 'Stackoverflow' и не включены в исходный файл. – user1167442
[** Никогда ** использовать ': label' или' :: label-like comment' внутри командного блока, заключенного в '()' круглые скобки] (http://stackoverflow.com/a/32147995/3439404) – JosefZ