Пакетный скрипт перерыв на пробелы? - PullRequest
0 голосов
/ 18 ноября 2010

Я использую следующий фрагмент кода;изменить что-то в Cmakefile:

for /f %%j in (CMakeLists.txt) do (
 if "%%j"=="Extensions_AntTweakBar" (
  echo #Extensions_AntTweakBar >> temp.tmp 
 ) else (
  if "%%j"=="Extensions_Inspection" (
   echo #Extensions_Inspection >> temp.tmp
  ) else (
      if "%%j"=="Extensions_InspectionBar" (
    echo #Extensions_InspectionBar >> temp.tmp
   ) else (
    echo %%j >> temp.tmp
   )
  )
 )
)

Кажется, что это работает, то есть он изменяет выбранные строки, однако, если есть пробел в одной строке, он получает эту строку только до появления пробела,Пример:

SET( PROJECT_NAME "MyProject")

Только получает строку:

SET(

Как мне тогда получить полную строку?

Ответы [ 2 ]

1 голос
/ 18 ноября 2010

В вашем коде вы добавляете пробел в каждой строке.

echo %%j[space]>> temp.tmp

Здесь вы можете удалить его (работает только с %% j), но обычно лучше установить перенаправление в качестве префикса, например

>> temp.tmp echo %%j

При нормальной переменной вариант постфикса может завершиться ошибкой

set var=hallo2
echo %var%>temp.tmp

Расширяется до echo hallo2> temp.tmp или echo hallo 2> temp.tmp, поэтому перенаправляется только stderr,Следующая проблема - ключевые слова ON OFF /? , если в вашем файле есть такое слово, вы получите неожиданные результаты, потому что echo интерпретирует эти слова.

[РЕДАКТИРОВАТЬ:] Чтобы решить эту проблему, вы можете использовать эхо (

>>temp.tmp echo(%%j

Вы можете получить пустые строки (или строки только с пробелами), вам просто нужно добавить их префикс.

for /f "delims=" %%a in ('findstr /n ".*" qut.bat') do (
    set var=%%a
    setlocal EnableDelayedExpansion
    echo(!var:*:=!
    endlocal
)

Переключение DelayedExpansion необходимо для сохранения символов "!" И "^"

1 голос
/ 18 ноября 2010

Разделителями по умолчанию являются пробел и табуляция. Если вы переопределите разделитель по умолчанию, он должен прочитать всю строку с пробелами между

for /f "delims=@" %%j in (CMakeLists.txt) do

Я установил его на @, и он игнорирует пробел как разделитель и читает всю строку. Вы можете установить для него уникальный символ, который, как вы знаете, не будет в текстовом файле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...