![]() |
Спецсимволы при перенаправлении
В общем возникла проблема при написании батника:
считываю построчно текстовый файл и перенаправляю строки в другой тестовый файл, но проблема в том что в файле некоторые строки содержат спецсимволы (<>&) и при перенаправлении, через обычное echo возникают ошибки. Можно ли как-то за экранировать эти символы, что бы в новый файл все записалось как надо?? Вот часть скрипта: @echo off for /f "tokens=* delims=" %%a in (c:\12.txt) do call :Change "%%a" :Change set Text=%~1 echo %~1|findstr "43" > nul if %errorlevel% == 0 ( (echo VarC=200)>> c:\newfile.txt ) else ( echo %Text% >> c:\newfile.txt ) |
Специмволы вообще экранируются через ^, но если неизвестно заранее, сколько их будет в строке - это не выход. Но если использовать вывод внутри цикла, то его особенностью будет то, что нахождение в считанной строке специмволов не повлияет на вывод. Пример:
Код:
@Echo Off |
вроде работает. только есть одна проблема, если встречается пустая строка, то в новый файл записывается "Режим вывода команд на экран (ECHO) отключен."
как это можно исправить?? |
H1ghlander, у меня на XP SP3 цикл for просто игнорирует пустые строки, не могу воспроизвести, увы. Но попробуйте заменить Echo %%A>>"%OutFile%" на
Код:
If Not "%%A"=="" (Echo %%A>>"%OutFile%") Else (Echo.>>"%OutFile%") |
Нет не помогает.
Сообщение появляется, только в том случае если перед переносом строки находится пробелы или знаки табуляции. |
H1ghlander, попробуйте так:
Код:
For /F "Tokens=1* Delims=:" %%A In ('Type "C:\12.txt"^|FindStr /in $') Do ((@Echo:"%%B"|Find "43" 1>nul&&@Echo:VarC=200)&(@Echo:"%%B"|Find /v "43" 1>nul&&@Echo:%%B))>>out.txt |
El Sanchez,
Твой вариант выводит только номера строк, да и причем всех подряд, в том числе где есть пусты строки |
H1ghlander, вот ещё такой вариант, в этом случае делает проверку, не является ли таб или пробел первым символом строки, если да - то пишет пустую строку. А вообще, это очень плохое решение, вам стоит помотреть в сторону sed (http://gnuwin32.sourceforge.net/packages/sed.htm)
Код:
@Echo Off |
Цитата:
|
Код:
@echo off A1=<A&B> A1=<A&B> <A&B> |
CyberMuesli, автор указывает, что чтение происходит из текстового файла, и сколько там спецсимволов, и есть ли они - заранее не известно. О экранировании через '^' уже написано во втором сообщении, но это не выход - не редактировать же каждый раз исходный файл перед обработкой?
Цитата:
|
Цитата:
Я не проверял с чтением из файла. Зато я проверил на простом echo. При наличии символов <&> echo %A% работает неправильно, а echo !A! работает правильно. Быть может, предварительное чтение файлов что-то меняет... Вечером проверю |
А при наличии символов «!»?
|
Цитата:
@echo off setlocal enabledelayedexpansion set A1=^<A^&B^^^!^> set A1 echo A1=!A1! echo !A1!>temp.tmp type temp.tmp del temp.tmp C:>x.bat A1=<A&B!> A1=<A&B!> <A&B!> Ошибка в синтаксисе команды. echo %A1% |
Да. Чтение файла всё меняет. Оно читает не по-честному, у меня пропадают восклицательные знаки
Код:
@echo off |
Цитата:
|
Время: 06:48. |
Время: 06:48.
© OSzone.net 2001-