Вы можете просто использовать текст, который вы хотите добавить, за которым обычно следует ваша переменная.
C:\>set MY_VAR=Hello world!
C:\>echo #%MY_VAR%
#Hello world!
C:\>set MY_VAR=#%MY_VAR%
C:\>echo %MY_VAR%
#Hello world!
Если вы просто делаете эхо, это нормально. echo #%%j
сделает то, что вам нужно.
Но если вы хотите установить строку в переменную, вам нужно включить отложенное расширение . Добавьте setlocal ENABLEDELAYEDEXPANSION
в начало вашего файла и затем окружите ваши переменные !
вместо %
. Например (и обратите внимание, что я добавил delims=
, чтобы поместить всю строку в %%j
вместо первого слова в строке):
@echo off
setlocal ENABLEDELAYEDEXPANSION
set LINE=
for /f "delims=" %%j in (CMakeLists.txt) do (
set LINE=%%j
if "%%j"=="Extensions AntTweakBar" (
set LINE=#%%j
)
if "%%j"=="Extensions Inspection" (
set LINE=#%%j
)
if "%%j"=="Extensions InspectionBar" (
set LINE=#%%j
)
echo !LINE!
)
Учитывая этот входной файл:
Extensions AntTweakBar
some text
Extensions Inspection
Extensions What?
some more text
Extensions InspectionBar
Extensions InspectionBar this line doesn't match because delims= takes all text
even more text
Приведенный выше скрипт выдает такой вывод:
C:\>comment.bat
#Extensions AntTweakBar
some text
#Extensions Inspection
Extensions What?
some more text
#Extensions InspectionBar
Extensions InspectionBar this line doesn't match because delims= takes all text
even more text
И, конечно же, удаление @echo off
поможет вам решить проблемы.
Но, несмотря на это, вы находитесь на грани того, что вы можете сделать с помощью пакетной обработки строк. Если вы все еще хотите использовать пакетные команды, вам может потребоваться начать запись строк во временные файлы и использовать findstr
с регулярным выражением.